集成 APNs 推送服务
更新时间: 2024/05/08 15:00:30
iOS 的离线推送需要通过 APNs 服务器来进行发送,因此在使用云信 NIM SDK 提供的离线推送功能之前,首先需要在您的项目中集成 APNs 离线推送服务,并实现与云信服务端的通信。
本文主要介绍如何集成 APNs 离线推送服务。
APNs 通信方式
云信服务端与 APNs 通信的方式分为以下两种:
-
使用 TLS 证书与 APNs 通信(文件扩展名为 .p12 的证书文件)
- 云信服务端通过 TLS 证书对 APNs 进行身份验证后,发送离线推送。该证书可以同时支持生产环境和开发环境。
- TLS 证书的有效期为一年。超出有效期后,必须创建新的证书,重新提供给云信。
-
使用验证令牌与 APNs 通信(文件扩展名为 .p8 的密钥文件)
- 云信服务端通过令牌对 APNs 进行身份验证后,发送离线推送。该证书可以同时支持生产环境和开发环境。
- 一个 APNs 签名密钥验证多个 App 的令牌,即多个应用程序可以使用同一个签名密钥。
- 签名密钥不会过期,因此只需提供一次,后续无需更新。
更多详细信息请参考使用验证令牌与 APNs 通信和使用 TLS 证书与 APNs 通信。
本文主要介绍使用 TLS 证书与 APNs 通信的形式(即通过 p12 推送证书)实现离线推送功能。
实现流程
步骤 1:创建 App ID 并开启推送功能
使用 APNs 推送服务前,您需要先拥有一个 App ID。若已拥有 App ID,则跳过此章节,只需在您原有的 App ID 上增加 Push Notification
的 Service
。如需要了解更详细的说明,请参考 注册 App ID 。
-
登录Apple 开发者网站,选择导航栏的Account。
-
进入 Certificates, IDs & Profiles(证书、标识符和描述文件),单击 Identifiers(标识符)。
-
单击 Identifiers 右侧的“+”按钮。
-
从选择项中选择 App IDs,单击 Continue。然后确认已自动选择的 App ID 类型,再单击 Continue。
-
填写 App ID 账号信息。
- 在 Description 中输入 App ID 的名称或描述。
- 选择 Explicit App ID,并在 Bundle ID 中输入 App 的
Bundle ID
。
Bundle ID
不能使用通配符 *,否则将无法使用远程推送服务。- 此处填写的
Bundle ID
应与 Xcode 中目标的 Summary 面板中输入的Bundle ID
一致。
-
Capabilities 中会显示 App 类型以及可使用的功能。勾选 Push Notifications 启用推送通知功能。 您还可以根据实际需求勾选其他对应的功能。
-
单击 Continue,再次确认注册信息后,单击 Register。
步骤 2:创建推送证书
您可以根据 APNs 通信方式,选择创建文件扩展名为 .p12 的证书或者文件扩展名为 .p8 的密钥。
步骤 3:上传推送证书至云信
-
登录云信控制台,在控制台首页应用管理中选择应用进入应用配置页面。
-
顶部选择证书管理页签,进入推送证书配置页。
-
在对应的 iOS 证书配置项中,单击添加证书。
-
iOS APNs p12 推送证书
-
iOS APNs P8 推送证书
-
-
填写证书信息并上传证书文件后,单击确定。
- 证书名称与 p12/p8 证书一一对应,服务器将根据证书名称来自动选择 p12/p8 文件。
- ⽣产环境或开发环境,请选择与该证书⽣成时相同的环境类型。
步骤 4:创建并安装配置文件
您需要创建一个 Provisioning Profile(配置文件),才能在设备上运行您的应用程序,使用推送通知功能。
-
在 Apple 开发者网站的 Certificates, IDs & Profiles(证书、标识符和描述文件)中,单击 Profiles(描述文件)。然后单击右侧的“+”按钮。
-
选择 Provisioning Profile的环境,单击 Continue。
-
选择对应的 App ID,单击 Continue。
-
选择所属的开发者证书,若创建了多个,选择 Select All,单击 Continue。
-
选择需要安装的设备(一般选择 Select All),单击 Continue。
-
填写 Profile Name,单击 generate,完成创建。
-
单击 Download下载到本地,然后双击下载的 Provisioning Profile 文件,将其添加到 Xcode。
步骤 5: 获取当前设备的 deviceToken
在您 App 的 application 中添加如下代码,向 APNs 服务端请求推送权限,获取 deviceToken。
考虑到合规,建议您在同意隐私协议之后再向 APNs 服务端请求 deviceToken。
示例代码如下:
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString * key = @"customAPNsType";
[[NIMSDK sharedSDK] updateApnsToken:deviceToken
customContentKey:key];
DDLogInfo(@"didRegisterForRemoteNotificationsWithDeviceToken: %@", deviceToken);
}