为聊天SDK启用iOS推送通知
本文将指导您在iOS应用程序中启用Chat SDK的推送通知。
注意:本指南不讨论配置概要文件.如果您计划创建分发证书,请确保在开始本指南之前已配置了供应。开发/沙盒证书可以用Xcode托管配置文件进行测试。
1.使用Apple启用推送通知并生成.p12证书
登入标识符部份苹果开发者会员中心然后选择你的应用。
在能力下,启用推送通知然后点击配置.
下生产SSL证书中,选择创建证书.
请按照创建证书签名请求在Apple Developer center上使用Keychain Access生成证书签名请求。
Apple Push服务证书生成后,下载并双击在Keychain Access中打开。
右键单击您创建的证书并选择导出“Apple Developer IOS Push Services…”.
保存.p12文件到您的计算机。密码为空。
保存. c文件到您的计算机。密码为空。
2.生成.pem文件
生成.pem为你的.p12文件使用OpenSSLpkcs12命令。看到pcks12在www.openssl.org.可以将“导入密码”保留为空。
$ openssl pkcs12-clcerts-节点-在你的.p12-你的.pem
你的.pem文件应包含证书和私钥部分。它还应该包含<代码数据-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">包的属性代码>有关捆绑包标识符、公司名称和其他信息的信息。
例子.pem文件:
袋属性
friendlyName:苹果推服务:你的.包.标识符
localKeyID:<关键数据>
主题=/UID=你的.包.标识符/CN=苹果推服务:你的.包.标识符/欧=0000000/O=你的公司/C=国家代码
发行人=/C=我们/O=苹果公司./欧=苹果在世界范围内开发人员关系/CN=苹果在世界范围内开发人员关系认证权威
-----开始证书-----
<证书数据>
-----结束证书-----
袋属性
friendlyName:开发人员的名字
localKeyID:<关键数据>
关键属性:<没有属性>
-----开始私人关键-----
<私人关键数据>
-----结束私人关键-----
3.测试.pem文件
你可以测试.pem文件通过连接到苹果的生产APNS服务器。
$ openssl s_client-连接网关.推.苹果.com:2195-cert你.pem-关键你.pem
如果你的.pem正确生成,SSL会话将与苹果APNS服务器建立,您将收到返回码<代码数据-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">0 == ok代码>.
如果您收到不同的代码,请确保重新访问上面的步骤2,或按照响应中的说明进行操作。
来自Apple APNS服务器的响应示例:
新,TLSv1/SSLv3,密码是DES-CBC3-沙
服务器公共关键是2048位
安全重新谈判是支持
压缩:没有一个
扩张:没有一个
没有ALPN谈判
SSL-会话:
协议:TLSv1.2
密码:DES-CBC3-沙
会话-ID:
会话-ID-ctx:
主-关键:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
开始时间:1563378474
超时:7200(证券交易委员会)
验证返回代码:0(好吧)
---
4.将.pem文件上传到聊天仪表板
如果你不是聊天管理员,请别人帮你完成这一步。
将.pem文件上传到聊天仪表板
在“聊天”仪表板中,转到>帐户> API和sdk.
选择仪表盘应用程序并单击选择PEM文件为iOS
上传你的.pem文件并保存更改。
此外,还可以启用APNS沙盒复选框以利用沙箱apn环境。
这是一个很好的练习.pem把它放在安全的地方,以防以后需要使用。
注意:在聊天仪表板中启用应用推送通知的完整指南可以在这里找到在这里.
5.在你的应用中为聊天SDK设置推送通知
在应用程序中设置推送通知
打开推送通知在你的目标中功能选项卡。
打开远程通知在你的目标的背景模式功能选项卡。
看到苹果公司的文档了解更多关于远程通知及其在后台模式下如何工作的信息。
在应用程序中设置分发APS环境.entitlements文件,以允许在部署期间使用生产推送证书对应用程序进行签名。
注册推送通知使用<代码数据-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">UNUserNotificationCenter代码>在AppDelegate中只针对该设备。看到为聊天SDK设置应用内推送通知下面实现<代码数据-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">UNUserNotificationCenter代码>.
斯威夫特
进口UserNotifications
#如果!TARGET_IPHONE_SIMULATOR
让notificationCenter=UNUserNotificationCenter.当前的()
notificationCenter.委托=自我
notificationCenter.requestAuthorization(选项:[.警报,.声音,.徽章]){授予,_在
警卫队授予其他的{返回}
DispatchQueue.主要.异步{
UIApplication.共享.registerForRemoteNotifications()
}
}
# endif
objective - c
#进口<UserNotifications/UserNotifications.h>
@接口AppDelegate:UIResponder<UIApplicationDelegate,UNUserNotificationCenterDelegate>
#如果!TARGET_IPHONE_SIMULATOR
UNUserNotificationCenter*中心=[UNUserNotificationCentercurrentNotificationCenter];
中心.委托=自我;
[中心requestAuthorizationWithOptions:(UNAuthorizationOptionSound|UNAuthorizationOptionAlert|UNAuthorizationOptionBadge)
completionHandler:^(保龄球授予,NSError*_Nullable错误){
如果(!错误){
[[UIApplicationsharedApplication]registerForRemoteNotifications];
}
}];
# endif
覆盖<代码数据-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">func application (_application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)代码>函数。
聊天v2 - Swift
进口ChatProvidersSDK
函数应用程序(_应用程序:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken:数据){
闲谈,聊天.registerPushToken(deviceToken)
}
聊天v2 - Objective-C
@进口ChatProvidersSDK;
-(无效)应用程序:(UIApplication*)应用didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
[ZDKChatregisterPushToken:deviceToken];
}
聊天v1 - Swift
进口闲谈,聊天
函数应用程序(_应用程序:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken:数据){
ZDCChat.setPushToken(deviceToken)
}
聊天v1 - Objective-C
#进口<ZDCChat/ZDCChat.h>
-(无效)应用程序:(UIApplication*)应用didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
[ZDCChatsetPushToken:deviceToken];
}
将收到的推送通知传递给Chat SDK。
聊天v2 - Swift
进口ChatProvidersSDK
函数userNotificationCenter(_中心:UNUserNotificationCenter,
didReceive响应:UNNotificationResponse,
withCompletionHandler completionHandler:@逃离()->无效){
让用户信息=响应.通知.请求.内容.用户信息
让应用程序=UIApplication.共享
闲谈,聊天.didReceiveRemoteNotification(用户信息,在:应用程序)
completionHandler()
}
聊天v2 - Objective-C
@进口ChatProvidersSDK;
-(无效)userNotificationCenter:(UNUserNotificationCenter*)中心didReceiveNotificationResponse:(UNNotificationResponse*)响应withCompletionHandler:(无效(^)())completionHandler{
[ZDKChatdidReceiveRemoteNotification:用户信息在:应用程序];
completionHandler();
}
聊天v1 - Swift
进口ZDCChat
函数应用程序(_应用程序:UIApplication,didReceiveRemoteNotification用户信息:[AnyHashable:任何],fetchCompletionHandler completionHandler:@逃离(UIBackgroundFetchResult)->无效){
ZDCChat.didReceiveRemoteNotification(用户信息)
completionHandler(.noData后)
}
聊天v1 - Objective-C
#进口<ZDCChat/ZDCChat.h>
-(无效)应用程序:(UIApplication*)应用didReceiveRemoteNotification:(NSDictionary*)用户信息fetchCompletionHandler:(无效(^)(UIBackgroundFetchResult))completionHandler{
[ZDCChatdidReceiveRemoteNotification:用户信息];
completionHandler(UIBackgroundFetchResultNoData);
}
6.为聊天SDK设置应用内推送通知
允许通知显示在您的应用程序通过实现<代码数据-garden-id="typography.code" data-garden-version="8.39.0" class="sc-eKYRIR sc-bTDOke bpSbjj iFHZBF">UNUserNotificationCenterDelegate代码>方法。
斯威夫特
进口UserNotifications
函数userNotificationCenter(_中心:UNUserNotificationCenter,
willPresent通知:UNNotification,
withCompletionHandler completionHandler:@逃离(UNNotificationPresentationOptions)->无效){
completionHandler([.警报,.声音,.徽章])
}
objective - c
#进口<UserNotifications/UserNotifications.h>
//在AppDelegate.h中将AppDelegate定义为UNUserNotificationCenterDelegate
@接口AppDelegate:UIResponder<UIApplicationDelegate,UNUserNotificationCenterDelegate>
-(无效)userNotificationCenter:(UNUserNotificationCenter*)中心
willPresentNotification:(UNNotification*)通知
withCompletionHandler:(无效(^)(UNNotificationPresentationOptions选项))completionHandler{
completionHandler(UNNotificationPresentationOptionAlert|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge);
}