原地址: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 = 0; void setListenerGameObject(char * listenerName) { free(listenerGameObject); listenerGameObject = 0; int len = strlen(listenerName); listenerGameObject = malloc(len+1); 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
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!=0) { 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