TUICallKit 组件支持通过接入推送插件,实现离线推送的功能。 TUICallKit 为您提供了两种集成方式:TIMPush 插件(付费)和自集成推送(免费),我们更推荐您使用 TIMPush 插件来实现离线推送,TIMPush 插件有以下优势:
接入周期短,预计全厂商接入仅需要 30 分钟。
支持数据统计和链路追踪,方便您查看推送触达率、点击率和转化率等各类指标。
支持全员/标签推送,方便您将营销广告、通知、新闻资讯等内容推送给所有用户或指定群体。
支持 uni-app 和 Flutter 等跨平台框架。
本文档将详细介绍如何在 TUICallKit 中集成 TIMPush 插件,以实现音视频通话的离线推送能力。
说明:
集成效果
应用在后台时或离线时 | 锁屏时 |
| |
准备条件
功能接入
1. 请参见推送插件 TIMPush 快速接入 文档,完成其中的步骤1、步骤2、步骤3及步骤5。
说明:
步骤6 和步骤7 在 TUICallKit 组件中发起通话请求和接收到通话请求时已完成,不需要单独配置。
2. 在项目的 app 目录下,找到并打开
build.gradle
文件,将应用包名修改为您的实际应用包名。applicationId 'com.****.callkit'
3. 实现自动登录功能。 您可以在自己的业务逻辑中实现自动登录,也可以在应用 Application 的 oncreate() 函数中注册以下通知回调,实现自动登录。
TUICore.registerEvent(TUIConstants.TIMPush.EVENT_NOTIFY, TUIConstants.TIMPush.EVENT_NOTIFY_NOTIFICATION, new ITUINotification() {@Overridepublic void onNotifyEvent(String key, String subKey, Map<String, Object> param) {if (TUIConstants.TIMPush.EVENT_NOTIFY.equals(key)) {if (TUIConstants.TIMPush.EVENT_NOTIFY_NOTIFICATION.equals(subKey)) {// please implement this method by yourself autoLogin();}}}});
完成上述步骤后,您的项目即具备了TUICallKit的离线唤醒功能。当主叫方发起通话时,被叫方即使在后台或离线状态,也能收到推送通知。用户点击推送通知进入应用并登录后,将自动拉起通话界面。
说明:
高级功能
自定义通知内容
TUICallKit 组件内 OfflinePushInfoConfig.kt 文件提供了默认的通知样式,可以直接使用,或者也可以修改相应代码进行自定义。
val pushInfo = TUICallDefine.OfflinePushInfo() pushInfo.title = "Mike" pushInfo.desc = "You have a new call" val params = TUICallDefine.CallParams() params.offlinePushInfo = pushInfo TUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)
自定义通知铃声
离线推送默认铃声是由系统决定的,可以在 手机设置 中,进入应用详情,手动查看或更改应用的通知铃声。
离线推送铃声目前仅支持华为、小米、FCM厂商进行自定义设置,其他厂商暂不支持。
将铃音文件添加到本地 Android Studio 工程 res/raw 目录下。
调用接口 setAndroidSound() 和 setIOSSound() 接口设置铃声。
val pushInfo = OfflinePushInfo()pushInfo.title = "Mike"pushInfo.desc = "You have a new call"pushInfo.androidSound = "phong_ring"pushInfo.iosSound = "phone_ringing.mp3"val params = TUICallDefine.CallParams()params.offlinePushInfo = pushInfoTUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)
val pushInfo = OfflinePushInfo()pushInfo.title = "Mike"pushInfo.desc = "You have a new call"pushInfo.androidSound = "phong_ring"pushInfo.iosSound = "phone_ringing.mp3"val params = TUICallDefine.CallParams()params.offlinePushInfo = pushInfoTUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)
注意:
将铃音文件添加到本地 Android Studio 工程 res/raw 目录下。
Android 8.0 之前,调用setAndroidSound() 和 setIOSSound() 接口设置铃声。
Android 8.0 之后,还需要登录小米厂商控制台并创建channel并做好配置,然后在 即时通信 IM 控制台中配置channelID,或在参数中配置。
val pushInfo = OfflinePushInfo()pushInfo.title = "Mike"pushInfo.desc = "You have a new call"pushInfo.androidSound = "phong_ring"pushInfo.iosSound = "phone_ringing.mp3"pushInfo.androidXiaoMiChannelID = "channelID"val params = TUICallDefine.CallParams()params.offlinePushInfo = pushInfoTUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)
FCM自定义铃声,需要在登录之前进行配置,详见 setCustomFCMRing。
TIMPushManager.getInstance().setCustomFCMRing("fcm_push_channel", "phone_ring", true)
Android 8.0 之前,调用setAndroidSound() 和 setIOSSound() 接口设置铃声。
Android 8.0之后,FCM 需要在 即时通信 IM 控制台中配置channelID,或在参数中配置。
val pushInfo = OfflinePushInfo()pushInfo.title = "Mike"pushInfo.desc = "You have a new call"pushInfo.androidSound = "phong_ring"pushInfo.iosSound = "phone_ringing.mp3"pushInfo.androidFCMChannelID = "fcm_push_channel"val params = TUICallDefine.CallParams()params.offlinePushInfo = pushInfoTUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Video, params, callback)
注意:
FCM 的数据消息可以实现类似VOIP 的通知机制,详情见:FCM VoIP(数据消息),通知消息和数据消息可以相互切换。TUICallKit 默认所有通话请求以 VoIP 的形式推送。
FCM 自定义铃声或者设置 channel id 仅支持证书模式。
自定义角标
常见问题
1. 若在集成过程中遇到问题,请务必先查阅 插件推送-常见问题 进行自助排查。
2. 条件说明:部分厂商要求必须上架应用市场才可以正常使用推送服务,详情参见下表:
厂商通道 | 是否需要上架 | 账号说明 |
小米 | 是 | 需要注册企业开发者账号 |
VIVO | 是 | 需要注册企业开发者账号 |
OPPO | 否 | 需要注册企业开发者账号 |
荣耀 | 否 | 需要注册企业开发者账号 |
华为 | 否 | 个人开发者账号即可 |
魅族 | 否 | 个人开发者账号即可 |