原地址: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
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!=)
{
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 推送实现的更多相关文章

  1. iOS推送证书转pem文件

    iOS推送证书转 .pem文件. 推送证书转pem文件openssl x509 -in apns_miaobozhibo.cer -inform der -out apns_miaobozhibo.p ...

  2. IOS 推送-客户端处理推送消息

    IOS 推送-客户端处理推送消息 1.推送调用顺序 APN push的消息到达后,UIApplicationDelegate有两个方法和处理消息有关: 1)application:didReceive ...

  3. IOS 推送-配置与代码编写

    IOS 推送配置与代码编写 这里介绍IOS的推送,本文章已经在IOS6/7/8上都能运行OK,按照道理IOS9应该没问题. 大纲: 1.文章前提 2.推送介绍 3.推送文件账号设置 4.推送证书介绍 ...

  4. IOS 推送消息 php做推送服务端

    IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPh ...

  5. 友盟iOS推送配置(从真机调试到推送)

    下面我来讲解一下友盟iOS的推送配置,其实友盟只是一个示例,换做其余的第三方推送服务也会适用,只是第三方的后面服务变了而已. iOS推送(包括真机调试)所需要的步骤和文件如下: 备注:这里我将省略掉一 ...

  6. iOS 推送全解析

    本文旨在对 iOS 推送(以下简称 推送)进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解.以下是 pikacod ...

  7. “iOS 推送通知”详解:从创建到设置到运行

    这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...

  8. 转载:iOS 推送的服务端实现

    参考网址1: iOS消息推送机制的实现 http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html 参考网址2: iOS 推送的 ...

  9. C#调用IOS推送

    C#调用IOS推送 使用的是 PushSharp 开源库 源码代码如下 点我

  10. iOS推送 再备

    这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 ...

随机推荐

  1. AMQ学习笔记 - 09. Spring-JmsTemplate之接收

    概要 JmsTemplate提供了4组*3,共计12个接收用的方法.   JmsTemplate接收所需要的资源ConnectionFactory和Destination,和发送是一致的.   接收的 ...

  2. php连接到数据库

    html代码: <form action="php_mysql_add.php" method="post"> 用户名: <input typ ...

  3. (转)在Windows上以服务方式运行 MSOPenTech/Redis

    ServiceStack.Redis 使用教程里提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这个命题发生改变了,在Windows上也可以部署生产环境的Redis, ...

  4. 洛谷 1865 A%B问题

    题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格式: 对 ...

  5. Git tricks: Unstaging files

    NOTE: Following content is directly reprinted from http://andrewberls.com/blog/post/git-tricks-unsta ...

  6. 简单工厂(Simple Pattern)模式

    一.简单工厂(Simple Factory)模式 Simple Factory 模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个公共的父类和公共的方法. Simple F ...

  7. unity 多线程

    对于客户端来说,好的用户体验,需要保持一个快速响应的用户界面.于是便要求:网络请求.io操作等 开销比较大的操作必须在后台线程进行,从而避免主线程的ui卡顿.(注:协程也是主线程的一部分,进行大量的i ...

  8. windbg调试.net程序

    1. 解决线上.NET应用程序的如下问题: 崩溃 CPU高 程序异常 程序Hang死 2. 安装WinDbg: http://msdn.microsoft.com/en-us/windows/hard ...

  9. C#简单的加密类

    1.加密 public class EncryptHepler { // 验值 static string saltValue = "XXXX"; // 密码值 static st ...

  10. win7 IIS 7.5 HTTP 错误 404.3 - Not Found

    HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 解决这个问题你只需要,打开控制面 ...