【Unity3D】iOS 推送实现
原地址:http://www.iappfan.com/%E3%80%90unity3d%E3%80%91ios-%E6%8E%A8%E9%80%81%E5%AE%9E%E7%8E%B0/
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface UIApplication(SupressWarnings)
- (void)application:(UIApplication *)application app42didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken;
- (void)application:(UIApplication *)application app42didFailToRegisterForRemoteNotificationsWithError:(NSError *)err;
- (void)application:(UIApplication *)application app42didReceiveRemoteNotification:(NSDictionary *)userInfo; - (BOOL)application:(UIApplication *)application app42didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
@end
#import "App42PushHandlerInternal.h"
#import <objc/runtime.h> void registerForRemoteNotifications()
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
} char * listenerGameObject = ;
void setListenerGameObject(char * listenerName)
{
free(listenerGameObject);
listenerGameObject = ;
int len = strlen(listenerName);
listenerGameObject = malloc(len+);
strcpy(listenerGameObject, listenerName);
} @implementation UIApplication(App42PushHandlerInternal) +(void)load
{
NSLog(@"%s",__FUNCTION__);
method_exchangeImplementations(class_getInstanceMethod(self, @selector(setDelegate:)), class_getInstanceMethod(self, @selector(setApp42Delegate:))); UIApplication *app = [UIApplication sharedApplication];
NSLog(@"Initializing application: %@, %@", app, app.delegate);
} BOOL app42RunTimeDidFinishLaunching(id self, SEL _cmd, id application, id launchOptions)
{
BOOL result = YES; if ([self respondsToSelector:@selector(application:app42didFinishLaunchingWithOptions:)])
{
result = (BOOL) [self application:application app42didFinishLaunchingWithOptions:launchOptions];
}
else
{
[self applicationDidFinishLaunching:application];
result = YES;
} [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; return result;
} void app42RunTimeDidRegisterForRemoteNotificationsWithDeviceToken(id self, SEL _cmd, id application, id devToken)
{
if ([self respondsToSelector:@selector(application:app42didRegisterForRemoteNotificationsWithDeviceToken:)])
{
[self application:application app42didRegisterForRemoteNotificationsWithDeviceToken:devToken];
}
// Prepare the Device Token for Registration (remove spaces and < >)
NSString *deviceToken = [[[[devToken description]
stringByReplacingOccurrencesOfString:@"<"withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
NSLog(@"deviceToken=%@",deviceToken);
const char * str = [deviceToken UTF8String];
UnitySendMessage(listenerGameObject, "onDidRegisterForRemoteNotificationsWithDeviceToken", str); } void app42RunTimeDidFailToRegisterForRemoteNotificationsWithError(id self, SEL _cmd, id application, id error)
{
if ([self respondsToSelector:@selector(application:app42didFailToRegisterForRemoteNotificationsWithError:)])
{
[self application:application app42didFailToRegisterForRemoteNotificationsWithError:error];
}
NSString *errorString = [error description];
const char * str = [errorString UTF8String];
UnitySendMessage(listenerGameObject, "onDidFailToRegisterForRemoteNotificationsWithError", str);
NSLog(@"Error registering for push notifications. Error: %@", error);
} void app42RunTimeDidReceiveRemoteNotification(id self, SEL _cmd, id application, id userInfo)
{
if ([self respondsToSelector:@selector(application:app42didReceiveRemoteNotification:)])
{
[self application:application app42didReceiveRemoteNotification:userInfo];
} NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo
options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
error:&error];
NSString *jsonString = nil;
if (! jsonData)
{
NSLog(@"Got an error: %@", error);
}
else
{
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString= %@",jsonString);
} if (jsonString)
{
const char * str = [jsonString UTF8String];
UnitySendMessage(listenerGameObject, "onPushNotificationsReceived", str);
}
else
{
UnitySendMessage(listenerGameObject, "onPushNotificationsReceived", nil);
}
} static void exchangeMethodImplementations(Class class, SEL oldMethod, SEL newMethod, IMP impl, const char * signature)
{
Method method = nil;
//Check whether method exists in the class
method = class_getInstanceMethod(class, oldMethod); if (method)
{
//if method exists add a new method
class_addMethod(class, newMethod, impl, signature);
//and then exchange with original method implementation
method_exchangeImplementations(class_getInstanceMethod(class, oldMethod), class_getInstanceMethod(class, newMethod));
}
else
{
//if method does not exist, simply add as orignal method
class_addMethod(class, oldMethod, impl, signature);
}
} - (void) setApp42Delegate:(id<UIApplicationDelegate>)delegate
{ static Class delegateClass = nil; if(delegateClass == [delegate class])
{
[self setApp42Delegate:delegate];
return;
} delegateClass = [delegate class]; exchangeMethodImplementations(delegateClass, @selector(application:didFinishLaunchingWithOptions:),
@selector(application:app42didFinishLaunchingWithOptions:), (IMP)app42RunTimeDidFinishLaunching, "v@:::");
exchangeMethodImplementations(delegateClass, @selector(application:didRegisterForRemoteNotificationsWithDeviceToken:),
@selector(application:app42didRegisterForRemoteNotificationsWithDeviceToken:), (IMP)app42RunTimeDidRegisterForRemoteNotificationsWithDeviceToken, "v@:::"); exchangeMethodImplementations(delegateClass, @selector(application:didFailToRegisterForRemoteNotificationsWithError:),
@selector(application:app42didFailToRegisterForRemoteNotificationsWithError:), (IMP)app42RunTimeDidFailToRegisterForRemoteNotificationsWithError, "v@:::"); exchangeMethodImplementations(delegateClass, @selector(application:didReceiveRemoteNotification:),
@selector(application:app42didReceiveRemoteNotification:), (IMP)app42RunTimeDidReceiveRemoteNotification, "v@:::"); [self setApp42Delegate:delegate];
} @end
C#
using UnityEngine;
using System.Collections;
using com.shephertz.app42.paas.sdk.csharp;
using com.shephertz.app42.paas.sdk.csharp.pushNotification;
using System;
using System.Runtime.InteropServices; public class PushScript : MonoBehaviour
{
const string api_key = "3c1d8c1d23e1dde0d820b06e33e6260e3b9ac0438d522a4ac9d524fc12cb8559";//"App42_App_Key";
const string secret_key = "254964c8a7fcc95cee0362adc2e0e06e0a64ec53c7a9e5279c11b3c4303edf73";//"App42_Secret_Key"; [System.Runtime.InteropServices.DllImport("__Internal")]
extern static public void registerForRemoteNotifications(); [System.Runtime.InteropServices.DllImport("__Internal")]
extern static public void setListenerGameObject(string listenerName); // Use this for initialization
void Start ()
{
Debug.Log("Start called");
setListenerGameObject(this.gameObject.name);// sets the name of the game object as a listener to which this script is assigned.
} //Sent when the application successfully registered with Apple Push Notification Service (APNS).
void onDidRegisterForRemoteNotificationsWithDeviceToken(string deviceToken)
{
if (deviceToken != null && deviceToken.Length!=)
{
registerDeviceTokenToApp42PushNotificationService(deviceToken,"User Name");
}
SendPushToUser("Suman","Hello, Unity!!");
} //Sent when the application failed to be registered with Apple Push Notification Service (APNS).
void onDidFailToRegisterForRemoteNotificationsWithError(string error)
{
Debug.Log(error);
} //Sent when the application Receives a push notification
void onPushNotificationsReceived(string pushMessageString)
{
Console.WriteLine("onPushNotificationsReceived");
//dump you code here
Debug.Log(pushMessageString);
} //Registers a user with the given device token to APP42 push notification service
void registerDeviceTokenToApp42PushNotificationService(string devToken,string userName)
{
ServiceAPI serviceAPI = new ServiceAPI(api_key,secret_key);
PushNotificationService pushService = serviceAPI.BuildPushNotificationService();
pushService.StoreDeviceToken(userName,devToken,"iOS");
} //Sends push to a given user
void SendPushToUser(string userName,string message)
{
ServiceAPI serviceAPI = new ServiceAPI(api_key,secret_key);
PushNotificationService pushService = serviceAPI.BuildPushNotificationService();
pushService.SendPushMessageToUser(userName,message);
} }
直接使用 http://docs.unity3d.com/Documentation/ScriptReference/NotificationServices.html
【Unity3D】iOS 推送实现的更多相关文章
- iOS推送证书转pem文件
iOS推送证书转 .pem文件. 推送证书转pem文件openssl x509 -in apns_miaobozhibo.cer -inform der -out apns_miaobozhibo.p ...
- IOS 推送-客户端处理推送消息
IOS 推送-客户端处理推送消息 1.推送调用顺序 APN push的消息到达后,UIApplicationDelegate有两个方法和处理消息有关: 1)application:didReceive ...
- IOS 推送-配置与代码编写
IOS 推送配置与代码编写 这里介绍IOS的推送,本文章已经在IOS6/7/8上都能运行OK,按照道理IOS9应该没问题. 大纲: 1.文章前提 2.推送介绍 3.推送文件账号设置 4.推送证书介绍 ...
- IOS 推送消息 php做推送服务端
IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPh ...
- 友盟iOS推送配置(从真机调试到推送)
下面我来讲解一下友盟iOS的推送配置,其实友盟只是一个示例,换做其余的第三方推送服务也会适用,只是第三方的后面服务变了而已. iOS推送(包括真机调试)所需要的步骤和文件如下: 备注:这里我将省略掉一 ...
- iOS 推送全解析
本文旨在对 iOS 推送(以下简称 推送)进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解.以下是 pikacod ...
- “iOS 推送通知”详解:从创建到设置到运行
这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...
- 转载:iOS 推送的服务端实现
参考网址1: iOS消息推送机制的实现 http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html 参考网址2: iOS 推送的 ...
- C#调用IOS推送
C#调用IOS推送 使用的是 PushSharp 开源库 源码代码如下 点我
- iOS推送 再备
这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...
随机推荐
- 字符集转换: Ansi - Unicode
字符集转换: Ansi - Unicode wstring AnsiToUnicode (const string& strSrc ) { /*!< 分配目标空间 */ ,strSrc. ...
- ThinkPHP中的视图二
ThinkPHP中的视图 1.模板注释 在实际项目开发中,经常要使用注释功能,如果是ThinkPHP框架,则可以在模板文件中使用如下方式进行注释: {// 注释内容 } :单行注释 {/* 注释内容 ...
- NSURLConnection ignore unverified certificate error when sending a synchronise request
Private API, use with caution. As we all know, it's easy to ignore the unverified certificate error ...
- AngularJS中的MVC模式
MVC根据逻辑关系,把前端项目的代码分为三个层次 model:模型,就是业务数据,前端项目中就是JS变量. view:视图,就是业务数据在用户面前的展现,前端项目中就是HTML. controller ...
- [译] 开发者角度,王道之论:Android 与 Windows Phone
前几天,在codeproject搜索Silverlight资料,偶然看到这篇文章,耐心读了2遍,非常不错:文章通过访谈聊天形式叙述,2位主角目前在<斯法克斯国家工程学院>软件学院上学. 周 ...
- oracle11.0.2 64位版本 Toad连接
今天重装了系统 oracle oracle客户端 之前连不上toad 今天总结 客户端路径:E:\app\ruonanxiao-pc\product\11.2.0\client_1 服务端路径:E: ...
- web前端学习之HTML CSS/javascript之一
前端编码之路之坎坷,web前端应该一直是个战场吧,各种浏览器的不兼容,各种小细节的修改,要往一个好的产品经理方向走,实在是难,昨天听了一位十年经验的产品经理讲座,最重要的恐怕就是协调资源的能力,而协调 ...
- silverlight视频、音频
几天发现MediaElement播放不了wav格式的音频文件,在网上找到一篇解决的文章: http://www.cnblogs.com/rupeng/archive/2011/02/20/195936 ...
- Informix 物联网应用示例(转)
相关概念 MQTT 是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务.MQTT 是专门针对物联网开发的轻量级传输协议.MQ ...
- Ubuntu16.04.1 安装MyCat
Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统. 安装Java环境,配置全局环境变量 MyCAT是使用JAV ...