iOS推送,从客户端到服务器
来源:互联网 发布:加盟淘宝店 编辑:程序博客网 时间:2024/05/16 09:10
注:xcode版本为6.1,服务器是Node.js。
关于iOS的推送原理,这里就不多写了。这里主要写的是如何实现iOS推送,包括客户端和服务器的实现。
iOS推送大概可以分为三个部分。客户端、证书申请、服务器。如果把这三个部分理清楚,那做起来也是极其容易的。
客户端
客户端的代码很少,在AppDelegate的didFinishLaunchingWithOptions里写上注册通知的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // 注册推送通知 { [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound]; }}
对应的,注册成功和失败有两个回调。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken{ NSString *token = [[newDeviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];}- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{}
注册成功后会返回一个32bytes的newDeviceToken,看情况我们需要把它转换位字符串使用。
这样,客户端的代码就完成了,就是这么简单!
但是,如果你现在就要测试,那么肯定会注册失败,因为我们还有很多东西没做呢。
证书
和申请开发者证书类似,先在本地生成一个请求证书。
打开Keychain Access,左上角Keychain Access - Certificate Assistant - Request a Certificate From a Certificate Authority。在User Email Address填上邮箱地址,然后Save to disk就可以了。
进入苹果的开发者平台https://developer.apple.com/account/ios/certificate/certificateList.action,我们需要在这里处理证书。
这里处理证书有两种方法,一种是先添加一个证书再将其添加到需要申请的应用设置里,另一种是直接通过修改应用的设置,在里面完成证书生成的过程。
第一种方法中,自己生成证书的类型一定要选择Push对应的类型,包括开发的和发布的。
下面介绍第二种方法。
在App IDs选项里,选中我们已经创建好的App,选择Edit编辑它的内容,里面有一项Push Notifications,将其勾选,可以看到下面有两个选项,分别对应开发和发布版本的证书,我们先选择开发版的。如果要打包发布版本的,则需要重走整个流程,把证书重新弄一遍,但要选择发布版的添加证书。
点击Create Certificate,跟着提示把刚才申请的证书上传,最后生成一个和推送相关的证书,将其Download下来。
然后再申请Provisioning Profile,这个跟申请开发者的profile流程一样,最后把profile下载下来,打开xcode并双击profile添加进去。
接下来就要处理刚才下载下来的证书了。
双击该证书,打开Keychain Access,找到对应的push证书,右键选择Export,后缀选择为cer并导出。
再次点击该证书左边的下三角,看到private key,右键选择Export,后缀选择为p12并导出。
这样,我们就有后缀为cer和p12的两个文件了。
在终端(mac里面的terminal)进入到这两个文件的位置,执行下面两句命令。
openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pemopenssl pkcs12 -in key.p12 -out key.pem -nodes
其中cert.cer和key.p12是我们刚才创建的两个文件,而最后会得到cert.pem和key.pem两个新的文件。
如果是发布版,则需要照前面的流程再次生成两个pem文件。
到这里,证书就弄完了,将证书上传到服务器吧。
服务器
这里服务器是用Node.js实现的。前提是你的Node服务器已经搭好了。
先看代码。
var options = { "cert": "./push_ssl/cert.pem", "key": "./push_ssl/key.pem", "gateway": "gateway.sandbox.push.apple.com",//"gateway.push.apple.com", "port": 2195};var apnConnection = new apn.Connection(options);var device = new apn.Device(token);var note = new apn.Notification();note.expiry = Math.floor(Date.now() / 1000) + 60;note.badge = 3;note.alert = message;note.sound = 'default';note.payload = {'messageFrom': 'Caroline'};note.device = device;apnConnection.pushNotification(note, device);
首先,这里需要用到apn。在前面需要定义:
var apn = require('apn');
在服务器外面需用执行:
npm install apn
导入对应的库。
cert.pem 和 key,pem是刚才生成的两个文件,需要提交的服务器上,并写上正确的路径。
gateway,如果是开发证书,则需要写上sandbox,如果是发布证书,则不需要,和注释里的一样。
token是在客户端里得到的字符串,你必须通过某种方式发送到服务器。执行完pushNotification之后,通知会推送到该token对应的设备上。
message就是要发送的内容。
不要忘记打包的时候用上我们生成的provisioning profile,这样才能够正确地使用证书。
- iOS推送,从客户端到服务器
- WEB应用从服务器主动推送Data到客户端的方式
- Web应用从服务器主动推送数据到客户端有哪些方式?
- WEB应用从服务器主动推送Data到客户端有那些方式?
- pushlet 服务器主动推送数据到客户端
- pushlet 服务器数据推送到客户端
- 实现服务器推送消息到客户端ServerPush
- 服务器自动推送到客户端浏览器
- ios的远程推送客户端及服务器
- iOS推送证书从申请到使用
- iOS推送证书从申请到使用
- 使用Pushlet将消息从服务器端推送到客户端
- 使用Pushlet将消息从服务器端推送到客户端【
- 使用Pushlet将消息从服务器端推送到客户端【原创】
- 使用Pushlet将消息从服务器端推送到客户端
- 使用Pushlet将消息从服务器端推送到客户端
- 使用Pushlet将消息从服务器端推送到客户端【原创】
- Pushlet实现消息从服务器端推送到客户端
- Gabor濾波小結整理
- 远程控制软件编程第二天
- USACO All Latin Squares 解题报告
- 排序
- 排序算法之快速排序笔记
- iOS推送,从客户端到服务器
- JavaWeb JDBC初步连接和JDBC连接规范化
- Objective-C Runtime 运行时之一:类与对象
- ACM--moving table
- 那些年,留在内地的中研院院士们
- 恢倍涸复诜扑氏敲寄附已孕郴庞芳
- 查找
- 诨耪笔障献渭疽栋呢控越儇邮右幻
- 忠母释械窖呢谌惹雇牟渭纬掳谌咐