Ziank的技术博客

iOS应用Push证书的申请

我们都知道苹果的iOS应用只支持自己的APNS推送,所有的开发者如果要开发推送功能都必须申请APNS推送证书,才能够实现推送功能。
基本上对iOS有点了解的开发者都明白APNS推送的基本原理,那就是客户端向APNS请求deviceToken,传递给Server,然后Server根据这个deviceToken和APNS推送证书,把要推送的消息发送给APNS服务器,APNS服务器就会把对应的消息发送给客户端设备,进而分发给应用。

APNS推送原理

##申请Push证书流程
那么我们使用服务器向APNS服务发送消息的时候,可以通过客户端获取到DeviceToken,那么推送证书,也就是上图中的payload从哪里获取呢?这个就要去苹果的开发者网站上生成对应的APNS推送证书并下载了。
生成APNS推送证书的主要步骤和生成开发者证书类似,都要先生成一个certSigningRequest文件,也就是在【钥匙串】【证书助理】中生成的请求文件,不会的童鞋可以百度一下开发者证书的生成过程。
之后在开发者网站上打开要推送应用的AppID,点击Edit,进入下图中的界面。
生成推送证书
勾选Push Notifications,然后选择Create Certificate,分别对应开发环境的push证书,和上线AppStore后的push证书。创建证书的过程和创建开发者证书一样。

下载push证书以后,可以在钥匙串中导出对应的p12证书文件,然后就可以使用该证书连接APNS服务器,发送PUSH消息了。需要注意的是发送的消息必须是指定格式的内容,否则会发送失败哦。
生成p12证书文件

##客户端获取DeviceToken的方法
客户端需要在didFinishLaunching方法中添加注册push通知的方法,以获取对应的deviceToken。

1
2
3
4
5
6
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
return YES;
}

然后添加接收注册结果的方法,就可以获取到对应的deviceToken。

1
2
3
4
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
NSLog(@"regisger success:%@", pToken);
//注册成功,返回deviceToken
}

同一个应用在同一台设备上的deviceToken基本上都是不会变化的,一般只有对设备恢复出厂设置才会导致deviceToken的变化。

###但是要注意的是,一个应用的develop和distribution版本获取到的deviceToken是不同的。