在即时通讯 IM 中集成 APNs
在即时通讯 IM 中集成 APNs
本页介绍如何在即时通讯 IM 中集成 APNs 并测试推送是否成功集成。
创建推送证书
按照以下步骤,在苹果开发者平台创建 APNs 推送证书。
步骤一 生成 CSR 文件
- 生成 Certificate Signing Request(CSR):
- 填写你的邮箱(该邮箱是申请 App ID 的付费帐号)和常用名称(一般默认是计算机名,无需更改),并选择保存到硬盘。
- 点击 Continue。
本地生成 CSR 文件 EMImDemoAPS.certSigningRequest
。
步骤二 创建 App ID
- 生成 App ID。如果已经有 App ID 可以跳至步骤三。
- 选择 App ID,点击 Continue。
- 选择 App, 点击 Continue。
- 输入你的 App ID 描述信息,可以输入工程名。设置 Bundle ID(在工程的 General 信息中),一般格式为 com.youcompany.youprojname。
- 选择需要支持 Push Notification,点击 Continue。
- 确定信息准确后,点击 Register。
步骤三 创建 app 的 APS 证书
- 返回到 App IDs 选择你需要推送的 app。
- 找到 Push Notifications, 点击 Configure。
- 如果是开发模式,点击 Development SSL Certificate 下的 Create Certificate。如果是生产模式,点击 Production SSL Certificate 下的 Create Certificate。
- Platform 选择 iOS,Choose File 选择第一步中创建的 CSR 文件,点击 Continue。
- aps 文件创建成功了,点击 Download 下载到本地。(文件名:开发版本为 aps_development.cer,发布版本为 aps.cer):
步骤四 生成推送证书
- 导入证书:双击步骤三下载的文件(aps_development.cer 和 aps.cer)将其安装到电脑,在 Keychain Access 中,可以看到导入的证书。
- 右键选择导出为 p12 文件(例如:存储为
EMImDemoAPS.p12
),设置证书密钥。
步骤五 生成 Provisioning Profile 文件(PP 文件)
- 在 iOS Developer Center,选择 Account > Certificates, Identifiers & Profiles > Profiles。在 Provisioning 页签,点击 Profiles 右侧的 + 图标。
- 选择 iOS App Development(这里演示开发版描述文件的创建, 发布版本的创建流程一样,如果发布版本,请选择 App Store),点击 Continue。
- App ID 选择需要创建 PP 文件的 App ID, 点击 Continue。
- 选择需要加入开发的设备,只有加入了的设备才能进行真机调试,创建发布版本时没有这个步骤,点击 Continue。
- 输入 PP 文件的名称,点击 Generate。
- PP 文件生成完成, 点击 Download。
上传推送证书
在环信即时通讯云控制台上传 APNs 推送证书。
在环信即时通讯云控制台首页的应用列表中,点击目标应用的操作栏中的管理。
在左侧导航栏中,选择即时通讯 > 功能配置 > 消息推送 > 证书管理,点击添加推送证书。
在添加推送证书对话框中选择苹果页签,配置 APNs 推送参数。
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
证书类型 | 是 | 消息推送证书类型,目前支持 p8 和 p12。 | |
证书名称 | String | 是 | 消息推送证书名称。创建推送证书的步骤四中创建的消息推送证书名称。 |
推送密钥 | String | 是 | 消息推送证书密钥。填写在创建推送证书的步骤四中导出消息推送证书文件时设置的证书密钥。该参数仅在使用 p12 证书时需要配置。 |
上传文件 | File | 是 | 点击 上传证书 上传创建推送证书的步骤四中获取的消息推送证书文件。 |
key id | String | 是 | 输入推送证书的 Key ID。该参数仅在使用 p8 证书时需要配置。 |
team id | String | 是 | 输入推送证书的 Team ID。该参数仅在使用 p8 证书时需要配置。 |
集成环境 | 是 | 集成环境: - Development:开发环境; - Production:生产环境。 | |
Bundle ID | String | 是 | 绑定 ID。创建推送证书的步骤二中创建 App ID 时设置的 Bundle ID。 |
铃声 | String | 否 | 接收方收到推送通知时的铃声提醒。 |
在客户端集成 APNs
步骤一 在 app 中开启推送权限
打开 Xcode,选择 TARGETS > Signing & Capabilities > Push Notifications 开启消息推送权限。
步骤二 将证书名称传递给 SDK
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注册推送。
[application registerForRemoteNotifications];
// 初始化 `Options`,设置 App Key。
EMOptions *options = [EMOptions optionsWithAppkey:@"easemob-demo#easeim"];
// 填写上传证书时设置的名称。
options.apnsCertName = @"PushCertName";
[EMClient.sharedClient initializeSDKWithOptions:options];
return YES;
}
步骤三 获取 device token 并传递给 SDK
DeviceToken 注册后,iOS 系统会通过以下方式将 DeviceToken 回调给你,你需要把 DeviceToken 传给 SDK。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// 异步方法
[EMClient.sharedClient registerForRemoteNotificationsWithDeviceToken:deviceToken completion:^(EMError *aError) {
if (aError) {
NSLog(@"bind deviceToken error: %@", aError.errorDescription);
}
}];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Register Remote Notifications Failed");
}
测试 APNs 推送
在即时通讯 IM 中集成并启用 APNs 推送后,可测试推送是否成功集成。
前提条件
准备一台使用 iOS 系统的未越狱的设备。
为了确保测试效果可靠,请避免使用模拟器进行测试。
测试步骤
- 在设备上登录应用,并确认 device token 绑定成功。
可以查看日志或调用获取用户详情的 RESTful 接口确认 device token 是否绑定成功。
杀掉应用进程。
在环信即时通讯控制台发送测试消息。
在左侧导航栏中选择 即时通讯 > 运营服务 > 用户管理。在用户管理页面中,在对应用户 ID 的操作栏中点击更多,然后选择发送rest消息。在弹出的对话框中选择消息类型,输入消息内容,然后点击发送。
提示
在证书管理页面中证书列表中,在每个证书的操作一栏中,点击 更多 > 测试,这里是直接调用第三方接口推送,而用户管理页面中的消息发送测试是先调用即时通讯 IM 的发消息的接口,满足条件后(即用户离线、推送证书有效且绑定了 device token)再调第三方的接口进行推送。
- 查看设备是否收到推送通知。
故障排除
检查在即时通讯 IM 中是否正确集成或启用了 APNs 推送。
在左侧导航栏中选择运营服务 > 用户管理。在用户管理页面中,在对应用户 ID 的操作栏中选择查看IM用户绑定推送证书。在弹出框中查看是否正确显示了证书名称和 device token。
检查是否在环信即时通讯控制台上传了正确的 APNs 证书且设置了正确的证书环境。
检查是否在聊天室中推送消息。聊天室不支持离线消息推送。
检查发送消息时是否设置了只发在线(
EMChatMessage#deliverOnlineOnly = YES
)。只发在线的消息不推送。