一切都是浮云,官方文档才是王道。
————————
一,ios push流程,
1),用户装了我们的游戏或者应用,并同意打开通知。会发送token至我们自己的服务器。
2),我们服务器进行推送时候,将token和推送内容发至apple的 apns 服务器。
3),apns服务,接受我们服务消息对用户进行push。
4),成功便在这一刻。
下面是一张到处都有的图片,顺便拿过来也用一下。以便于看图说话。
二,乱七八糟的证书
这节不想说,到处都是apple的流程截图,唯一想说的是,作为新手的我遇到的问题:
1),用尽全身72变的功力,终于把证书搞定,正打算真机调试,竟忽然跳出error!花有别用红,瞬间明白error是红色的缘由了。。。编译器豪不犹豫的say:CodeSign error: Certificate identity ‘iPhone Developer: XXX (YYY)’ appears more than once in the keychain. The codesign tool requires there only be one.”
于是google各种答案,于是淡定的删除了其他的 “iPhone Developer: XXX (YYY)"只留下了这一个,但是xcode竟然还暴红。于是不淡定的删掉了所有的“iPhone Developer: XXX (YYY)",重新再次生成了证书。这次xcode给面子了。
2),一开始进入真机调试的时候,总是得不到token并且进入didFailToRegisterForRemoteNotificationsWithError函数,log出来error内容是:"NSLocalizedDescription=未找到应用程序的“aps-environment”的权利字符串"。
问题在哪里呢?不错,问题又出在证书上,请用文档打开你的证书,搜索"aps",很开心,你会发型你找不到。这个时候请到developer.apple。上重新下载你的证书,并且搜索"aps",如果找到了。问题便解决了。
3),由于苹果新手,对于苹果中的 NSString,NSData,NSAarray,还有文件系统的操作完全不熟悉,最后。。。舍弃了ios的文件系统。用了c++。
三,客服端
客服端需要做的事情非常少,在你的AppDelegate里面只要做两件事:一,注册push服务;二,像自己的服务器发送token。
1),注册push服务,
在didFinishLaunchingWithOptions函数里面调用
[[UIApplicatiosharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAler|UIRemoteNotificationTypeBadg| UIRemoteNotificationTypeSound)];
唯一需要注意的是,如果你的appdegelate文件是.mm那么上面的函数会报错,UIRemoteNotificationTypeAler|UIRemoteNotificationTypeBadg| UIRemoteNotificationTypeSound,只能在.m里面使用。
2),发送token至自己的服务器
故名思意,发送token(字符串)到自己的服务器。
在appdegelate里实现接口 didRegisterForRemoteNotificationsWithDeviceToken。并且在里面实现向自己服务器发送token数据。
四,服务器
服务器需要证书里面的数据,乱七八糟的,我也不知道是何物,总之就是苹果的一些类似于开业许可证,执照之类的吧。这个不细说,简单的服务代码网上到处都有,我也是从一个人的博客里面下载了服务器代码(c语言版本)。请原谅我忘记记下那人的博客地址,若有下次必定在次贴出。现在也把这些代码贴在此处。
1),推送的数据格式(json)
格式有两种:
1.1),{"aps":{"alert":"Hello,world!","sound":"default","badge":1}},其中alert是推送的文字,sound是播放声音,"default"是默认的声音,badge”字段是需要在主屏图标上显示的提示数字
1.2),{"aps":{"alert":{"action-loc-key":"Open","body":"Hello, world!"},"sound":"default","badge":2}}和上面的区别就是 alert的格式不同,上面只是一段文字,这个会多出一个"Open"的按钮。
2),服务器下载链接地址(xcode)
http://download.csdn.net/detail/id_for_xiaosi/5098541