消息推送过程
应用启动时,调用
registerUserNotificationSettings:
方法与Apple的APNS
服务器通信,并注册推送服务。注册成功后,系统会调用应用的didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
方法。其中,deviceToken
参数是APNS
返回的deviceToken
(用来唯一标识一个设备,每个设备上的每个应用的deviceToken
都不相同)。在这里,我们需要将这个deviceToken
上传到我们自己的服务器中,用来向指定设备发送push消息。服务端拿到这个
deviceToken
后,使用我们申请好的证书和这个deviceToken
,向Apple的APNS
服务器发送一个JSON串,这个JSON串中包含我们要向iOS设备发送的内容。APNS
服务器收到这个JSON串,并向deviceToken
指定的设备发送消息,iOS应用收到消息后,会调用- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
方法。APNS
发送完消息后,将消息是否推送成功的状态反馈给我们的服务端。
开发前的准备
这里的准备主要是需要从Apple开发者中心注册好应用ID并申请相应的证书。
注册应用ID
- 打开Apple developer member center,如下图所示,点击红框里面的那一项。
- 点击左侧的Identifiers下的App IDs项,如下图所示,然后点击右上角的加号。
- 在下图的Name一栏里填入应用名字(可以跟你的iOS应用名字不同)。
- 继续往下拉,选中App ID Suffix项的Explicit App ID,在Bundle ID栏里填入你的应用的Bundle ID(需要跟你的应用的Bundle Identifier相同)。
- 不要忘记在下面的App Services里面勾选上Push Notification(不勾选不能使用推送服务)。
- 继续点击Continue,在新页面中点击submit,最终出现下面的页面,点击Done完成创建应用。
生成推送证书
- 打开Mac上的钥匙串访问应用,在左上角的状态栏中的钥匙串访问项中选择证书助理,再选择从证书颁发机构请求证书。
- 打开如下图界面后,在用户电子邮件地址栏中填入Apple开发者账号的电子邮件地址,常用名称中填入一个名字,这里起Push。
- 选择保存到磁盘。
- 然后点击继续,将证书保存到桌面的push文件夹中。
- 现在,push文件夹中有了一个
CertificateSigningRequest.certSigningRequest
的文件。 - 继续回到member center中,在左侧选择Certificates下的All,点击右上角的加号。
- 在证书类型选择那里像下图那样选择(这里申请的是开发测试证书,正式发布产品的话选择下面Product栏里的证书)。
- 在下面的App ID项里选择刚才创建的App ID。
- 在Upload CSR file那里选择选择刚才保存在桌面的p