原地址: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

 

 

PushScript.cs
 
 
 
 
 
 
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!=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

相关文章:

  • 2021-06-10
  • 2021-09-13
  • 2022-12-23
  • 2021-10-09
  • 2021-05-21
  • 2021-10-05
  • 2022-12-23
猜你喜欢
  • 2022-03-02
  • 2022-12-23
  • 2022-12-23
  • 2021-11-30
  • 2021-08-01
  • 2021-09-27
  • 2021-10-18
相关资源
相似解决方案