Push Notification Provider 是一个应用程序,用于通过 APNs 发送推送通知给 iPhone 应用。
通过 APNs 发送推送通知有几个步骤:
1. 使用前面创建的 SSL 证书与 APNs 通讯;
2. 构造所要发送的消息载体;
3. 发送载体到APNs;
APNs 是一个基于流的 TCP socket,你的 provider 以 SSL 协议与其通讯。推送通知(包括载体)是以二进制流的方式发送的。和APNs 建立连接后,你可以维持该连接并在连接中断之前发送多个通知。
b.在mac电脑上,打开钥匙链。点击钥匙串访问--证书助理--从证书颁发机构请求证书--填写账号,名称,存储到磁盘。
生成了一个 CertificateSigningReques
c.在苹果开发者中心,选择对应的应用,提交第二步生成的文件,激活应用的推送功能。
d.下载激活成功后的文件,并双击。(分为开发模式和发布模式:aps_development.cer 和 aps_production.cer 为开发主动推送服务而用到的证书,如果需要做服务器方面的主动推送的话,就必须要下载这个文件来使用推送服务了)
e.点击Provisioning进行设置,添加一个新的许可,选择刚刚新创建的App IDs.创建新的xxxxxx.mobileprovision 文件,并下载。(为App 接受推送通知的许可服务)
f.在xcode 工程中来设置对应刚才下载下来的证书。(Code Signing Identity)
1:
2:
3:
2.编程
在iOS 7.0 及以下,在应用的启动方法中:
[[UIApplication
还有三个方法,注册成功/失败,接收通知。
a.- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
b.- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
c.- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
在iOS8.0中需要加上这些:
#ifdef __IPHONE_8_0
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
[application registerForRemoteNotifications];
}
#endif
#ifdef __IPHONE_8_0
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge
| UIRemoteNotificationTypeSound
| UIRemoteNotificationTypeAlert) categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
#endif
最后备注:记得在应用启动和恢复至前台的时候留意:
//右上角数字图标 ,置0或设置其他数字。
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
3.服务器所需要的文件的生成过程
1)在Keychain Access.app里选定这个新证书(Apple Development Push Services*),导出到桌面,保存为Certificates.p12.
2)然后运行如下命令:
1. openssl pkcs12 -clcerts -nokeys -out cert.pem -in Certificates.p12
2. openssl pkcs12 -nocerts -out key.pem -in Certificates.p12
3. openssl rsa -in key.pem -out key.unencrypted.pem
4. cat cert.pem key.unencrypted.pem > ck.pem
完毕,如有错误,请指正。