TUICallKit 组件支持通过接入推送插件,实现离线推送的功能。 TUICallKit 为您提供了两种集成方式:TIMPush 插件(付费)和 自集成推送(免费),我们更推荐您使用 TIMPush 推送插件来实现离线推送,TIMPush 推送插件有以下优势:
接入周期短,预计全厂商接入仅需要 30 分钟。
支持数据统计和链路追踪,方便您查看推送触达率、点击率和转化率等各类指标。
支持全员/标签推送,方便您将营销广告、通知、新闻资讯等内容推送给所有用户或指定群体。
支持 uni-app 和 Flutter 等跨平台框架。
集成效果
锁屏时的效果 | 在后台时的效果 |
| |
配置离线推送
1. 集成 TIMPush 组件。
2. 开启 App 远程推送。
3. 生成证书。
4. 上传证书到 IM 控制台。
5. 完成工程配置
6. 配置推送参数。
7. 拨打离线推送电话。
步骤1: 集成 TIMPush 组件
1. TIMPush 组件支持 cocoapods 集成,您需要在 Podfile 中添加组件依赖。
target 'YourAppName' do# Uncommment the next line if you're using Swift or would like to use dynamic frameworksuse_frameworks!use_modular_headers!# Pods for Examplepod 'TIMPush', '7.9.5668'end
2. 执行以下命令,安装 TIMPush 组件。
pod install # 如果无法安装 TUIKit 最新版本,执行以下命令更新本地的 CocoaPods 仓库列表。 pod repo update
步骤2: 开启 App 远程推送
1. 登录 苹果开发者中心 网站,单击 Certificates, IDs & Profiles 选项卡中的 Identifiers,进入 Certificates, Identifiers & Profiles 页面。
2. 单击 Identifiers 右侧的 “+”。
3. 您可以参考如下步骤新建一个 AppID,或者在您原有的 AppID 上增加
Push Notification
的 Service
。说明:
需要注意的是,您 App 的
Bundle ID
不能使用通配符 *,否则将无法使用远程推送服务。4. 勾选 App IDs,单击 Continue 进行下一步。
5. 选择 App,单击 Continue 进行下一步。
6. 配置
Bundle ID
等其他信息,单击 Continue 进行下一步。7. 勾选 Push Notifications,开启远程推送服务。
步骤3:生成证书
1. 选中您的 AppID,找到 Push Notifications 配置项,选择 Configure。
2. 可以看到在 Apple Push Notification service SSL Certificates 窗口中有两个
SSL Certificate
,分别用于开发环境(Development
)和生产环境(Production
)的远程推送证书。3. 我们先选择开发环境(
Development
)的 Create Certificate,系统将提示我们需要一个Certificate Signing Request(CSR)
。4. 在 Mac 上打开钥匙串访问工具(Keychain Access),在菜单中选择钥匙串访问 > 证书助理 > 从证书颁发机构请求证书(
Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority
)。
5. 输入用户电子邮件地址(您的邮箱)、常用名称(您的名称或公司名),选择 “存储到磁盘(Saved to disk)”,单击继续,系统将生成一个
*.certSigningRequest
文件。6. 返回上述
第3步
中 Apple Developer
网站刚才的页面,单击 “Choose File” 上传生成的*.certSigningRequest
文件。
7. 单击 Continue,即可生成推送证书。
8. 单击 Download 下载开发环境的
Development SSL Certificate
到本地。9. 再次按照上述步骤1 - 8,将生产环境的
Production SSL Certificate
下载到本地。说明:
生产环境的证书实际是开发(
Sandbox
)+生产(Production
)的合并证书,可以同时作为开发环境和生产环境的证书使用。10. 双击打开下载的开发环境和生产环境的
SSL Certificate
,系统会将其导入钥匙串中。11. 打开钥匙串应用,在“登录” > “我的证书”,右键分别导出刚创建的开发环境(
Apple Development IOS Push Service
)和生产环境(Apple Push Services
)的 P12 文件。说明:
保存
P12
文件时,请务必要为其设置密码。步骤4:上传证书到 IM 控制台
1. 登录 即时通信 IM 控制台。
2. 单击目标应用卡片,进入应用的基础配置页面。
3. 单击 iOS 原生离线推送设置右侧的添加证书。
4. 选择证书类型,上传 iOS 证书(p.12),设置证书密码,单击确认。
说明:
上传证书名最好使用全英文(尤其不能使用括号等特殊字符)。
上传证书需要设置密码,无密码收不到推送。
发布 App Store 的证书需要设置为生产环境,否则无法收到推送。
上传的 p12 证书必须是自己申请的真实有效的证书。
5. 待推送证书信息生成后,记录证书的 ID。
步骤5:完成工程配置
要在应用程序中添加所需的权限,请在 Xcode 项目中启用推送通知功能。
打开 Xcode 项目,在 Project > Target > Capabilities 页面中点击红框中的加号按钮,然后选择并添加 Push Notifications,添加后的结果如图中黄框所示:
步骤6:配置推送参数
您需要在 AppDelegate 中,实现
offlinePushCertificateID
协议方法返回证书 ID 即可。import TIMPushfunc offlinePushCertificateID() -> Int32 {return kAPNSBusiId}
#pragma mark - TIMPush- (int)offlinePushCertificateID {return kAPNSBusiId;}
步骤7:拨打离线推送电话
import TUICallKit_Swiftimport TUICallEnginelet pushInfo: TUIOfflinePushInfo = TUIOfflinePushInfo()pushInfo.title = ""pushInfo.desc = "您有一个新的通话"pushInfo.iOSPushType = .apnspushInfo.ignoreIOSBadge = falsepushInfo.iOSSound = "phone_ringing.mp3"pushInfo.androidSound = "phone_ringing"// OPPO必须设置ChannelID才可以收到推送消息,这个channelID需要和控制台一致// OPPO must set a ChannelID to receive push messages. This channelID needs to be the same as the console.pushInfo.androidOPPOChannelID = "tuikit"// FCM channel ID, you need change PrivateConstants.java and set "fcmPushChannelId"pushInfo.androidFCMChannelID = "fcm_push_channel"// VIVO message type: 0-push message, 1-System message(have a higher delivery rate)pushInfo.androidVIVOClassification = 1// HuaWei message type: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835pushInfo.androidHuaWeiCategory = "IM"let params = TUICallParams()params.userData = "User Data"params.timeout = 30params.offlinePushInfo = pushInfo// 仅以单人通话举例、群通话类似TUICallKit.createInstance().call(userId: "123456", callMediaType: .audio, params: params) {} fail: { code, message in}
#import <TUICallKit_Swift/TUICallKit_Swift-Swift.h>#import <TUICallEngine/TUICallEngine.h>- (TUICallParams *)getCallParams {TUIOfflinePushInfo *offlinePushInfo = [self createOfflinePushInfo];TUICallParams *callParams = [TUICallParams new];callParams.offlinePushInfo = offlinePushInfo;callParams.timeout = 30;return callParams;}- (TUIOfflinePushInfo *)createOfflinePushInfo {TUIOfflinePushInfo *pushInfo = [TUIOfflinePushInfo new];pushInfo.title = @"";pushInfo.desc = @"您有一个新的通话";pushInfo.iOSPushType = TUICallIOSOfflinePushTypeAPNs;pushInfo.ignoreIOSBadge = NO;pushInfo.iOSSound = @"phone_ringing.mp3";pushInfo.AndroidSound = @"phone_ringing";// OPPO必须设置ChannelID才可以收到推送消息,这个channelID需要和控制台一致// OPPO must set a ChannelID to receive push messages. This channelID needs to be the same as the console.pushInfo.AndroidOPPOChannelID = @"tuikit";// FCM channel ID, you need change PrivateConstants.java and set "fcmPushChannelId"pushInfo.AndroidFCMChannelID = @"fcm_push_channel";// VIVO message type: 0-push message, 1-System message(have a higher delivery rate)pushInfo.AndroidVIVOClassification = 1;// HuaWei message type: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835pushInfo.AndroidHuaWeiCategory = @"IM";return pushInfo;}// 仅以单人通话举例、群通话类试[[TUICallKit createInstance] callWithUserId:@"123456"callMediaType:TUICallMediaTypeAudioparams:[self getCallParams] succ:^{} fail:^(int code, NSString * _Nullable errMsg) {}];
常见问题
1、收不到推送,且后台报错 bad devicetoken?
如果使用的是 Release 环境编译,则
- application:didRegisterForRemoteNotificationsWithDeviceToken:
回调返回的是发布环境的 token,此时 businessID 需要设置生产环境的 证书 ID 。如果使用的是 Debug 环境编译,则
- application:didRegisterForRemoteNotificationsWithDeviceToken:
回调返回的是开发环境的 token,此时 businessID 需要设置开发环境的 证书 ID 。let config = V2TIMAPNSConfig()// 用户自己到苹果注册开发者证书,在开发者帐号中下载并生成证书(p12 文件),将生成的 p12 文件传到腾讯证书管理控制台,// 控制台会自动生成一个证书 ID,将证书 ID 传入以下 businessID 参数中。config.businessID = sdkBusiIdconfig.token = deviceTokenV2TIMManager.sharedInstance().setAPNS(config) {} fail: { code, message in}
V2TIMAPNSConfig *config = [[V2TIMAPNSConfig alloc] init];// 用户自己到苹果注册开发者证书,在开发者帐号中下载并生成证书(p12 文件),将生成的 p12 文件传到腾讯证书管理控制台,// 控制台会自动生成一个证书 ID,将证书 ID 传入以下 businessID 参数中。config.businessID = sdkBusiId;config.token = self.deviceToken;[[V2TIMManager sharedInstance] setAPNS:config succ:^{} fail:^(int code, NSString *msg) {}];
2、iOS 开发环境下,注册偶现不返回 deviceToken 或提示 APNs 请求 token 失败?
此问题现象是由于 APNs 服务不稳定导致的,可尝试通过以下方式解决:
1. 给手机插入 SIM 卡后使用 4G 网络测试。
2. 卸载重装、重启 App、关机重启后测试。
3. 打生产环境的包测试。
4. 更换其它 iOS 系统的手机测试。