原地址:http://www.iappfan.com/%E3%80%90unity3d%E3%80%91ios-%E6%8E%A8%E9%80%81%E5%AE%9E%E7%8E%B0/
#import#import @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"#importvoid 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 )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); } }
直接使用