Notification

最近更新时间:2025-03-07 14:15:42

我的收藏
TUICallKit 组件支持通过接入推送插件,实现离线推送的功能。 TUICallKit 为您提供了两种集成方式:TIMPush 插件(付费)和自集成推送(免费),我们更推荐您使用 TIMPush 插件来实现离线推送,TIMPush 插件有以下优势:
接入周期短,预计全厂商接入仅需要 30 分钟。
支持数据统计和链路追踪,方便您查看推送触达率、点击率和转化率等各类指标。
支持全员/标签推送,方便您将营销广告、通知、新闻资讯等内容推送给所有用户或指定群体。
支持 uni-app 和 Flutter 等跨平台框架。
本文档将详细介绍如何在 TUICallKit 中集成 TIMPush 插件,以实现音视频通话的离线推送能力。
说明:
如果您想要实现自集成推送,请参见:Android-自集成推送。跑通离线推送功能中,步骤7和步骤8不需要配置,TUICallKit 组件内部已完成。

集成效果

TUICallKit 含UI方案集成 TIMPush推送插件 的效果如下(以下是 vivo X60的显示效果,不同厂商的设备可能会呈现出不同的效果)。
应用在后台时或离线时
锁屏时







准备条件

1. 开通服务

进入 IM 控制台 > 插件市场,单击立即购买免费试用(每个应用可免费试用一次,有效期7天)。



注意:
推送插件试用或购买到期后,将自动停止提供推送服务(包括普通消息离线推送、全员/标签推送等服务)。为避免影响您业务正常使用,请提前 购买/续费

2. 厂商配置

在进行离线推送功能的集成前,请确保已按照官方文档完成 厂商配置,以确保TUICallKit的离线推送功能正常运行。

功能接入

1. 请参见推送插件 TIMPush 快速接入 文档,完成其中的步骤1步骤2步骤3步骤5
说明:
步骤4 无需单独调用;TUICallKit组件在调用 TUILogin.login() 接口实现登录时,会自动完成注册。
步骤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() {
@Override
public 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的离线唤醒功能。当主叫方发起通话时,被叫方即使在后台离线状态,也能收到推送通知。用户点击推送通知进入应用并登录后,将自动拉起通话界面。
说明:
如果您的应用在接收推送或拉起页面时遇到问题,您可以参见 后台时拉不起通话界面被叫端来电显示策略 对问题进行排查。

高级功能

自定义通知内容

在调用 calls 发起通话时,可通过自定义 CallParams 参数来配置 OfflinePushInfo 内容。
TUICallKit 组件内 OfflinePushInfoConfig.kt 文件提供了默认的通知样式,可以直接使用,或者也可以修改相应代码进行自定义。
Kotlin
Java
import com.tencent.qcloud.tuikit.tuicallengine.TUICallDefine
import com.tencent.qcloud.tuikit.tuicallkit.TUICallKit

val pushInfo = TUICallDefine.OfflinePushInfo()
pushInfo.title = "Mike"
pushInfo.desc = "You have a new call"

val params = TUICallDefine.CallParams()
params.offlinePushInfo = pushInfo

val list = mutableListOf<String>()
list.add("Mike")
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Audio, params, null)
import com.tencent.qcloud.tuikit.tuicallengine.TUICallDefine;
import com.tencent.qcloud.tuikit.tuicallkit.TUICallKit;

TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setTitle("Mike");
pushInfo.setDesc("You have a new call");

TUICallDefine.CallParams params = new TUICallDefine.CallParams();
params.offlinePushInfo = pushInfo;

List<String> list = new ArrayList<>();
list.add("Mike");
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Audio, params, null);

自定义通知铃声

离线推送默认铃声是由系统决定的,可以在 手机设置 中,进入应用详情,手动查看或更改应用的通知铃声。
在调用calls 发起通话时,可通过自定义 CallParams 参数来配置 OfflinePushInfo 内容以实现离线推送铃音的自定义。
说明:
离线推送铃声目前仅支持华为小米FCM、OPPO 厂商进行自定义设置,其他厂商暂不支持。
将铃音文件添加到本地 Android Studio 工程 res/raw 目录下。
华为
小米
FCM(通知消息)
OPPO
调用接口 setAndroidSound() 和 setIOSSound() 接口设置铃声。
kotlin
java
val pushInfo = OfflinePushInfo()
pushInfo.title = "Mike" pushInfo.desc = "You have a new call"
pushInfo.androidSound = "private_ring"
pushInfo.iosSound = "private_ring.mp3"

val params = TUICallDefine.CallParams()
params.offlinePushInfo = pushInfo

val list = mutableListOf<String>()
list.add("Mike")
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Video, params, null)
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.CallParams().offlinePushInfo;
pushInfo.setTitle("Mike")
pushInfo.setDesc("You have a new call") pushInfo.setAndroidSound("private_ring");
pushInfo.setIOSSound("private_ring.mp3");

TUICallDefine.CallParams params = new TUICallDefine.CallParams();
params.offlinePushInfo = pushInfo;

List<String> list = new ArrayList<>();
list.add("Mike");
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Video, params, null);
注意
华为推送的铃声为首次创建通知渠道时的铃声,之后再次设置其他铃声无效,若想更新铃音需卸载重装,详见:华为自定义铃声
Android 8.0 之前,调用 setAndroidSound() 和 setIOSSound() 接口设置铃声。
Android 8.0 之后,还需要登录小米厂商控制台并 创建 channel 并做好配置,然后在 即时通信 IM 控制台 中配置channelID,或在参数中配置。
kotlin
java
val pushInfo = OfflinePushInfo()
pushInfo.title = "Mike"
pushInfo.desc = "You have a new call"
pushInfo.androidSound = "private_ring"
pushInfo.iosSound = "private_ring.mp3"
pushInfo.androidXiaoMiChannelID = "channelId"

val params = TUICallDefine.CallParams()
params.offlinePushInfo = pushInfo

val list = mutableListOf<String>()
list.add("Mike")
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Video, params, callback)
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setTitle("Mike");
pushInfo.setDesc("You have a new call");
pushInfo.setAndroidSound("private_ring");
pushInfo.setIOSSound("private_ring.mp3");
pushInfo.setAndroidXiaoMiChannelID("channelId");

TUICallDefine.CallParams params = new TUICallDefine.CallParams();
params.offlinePushInfo = pushInfo;

List<String> list = new ArrayList<>();
list.add("Mike");
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Video, params, callback);



Android 8.0 之前,调用setAndroidSound() 和 setIOSSound() 接口设置铃声。
Android 8.0 之后,需要在 即时通信 IM 控制台中配置 channelID(或在参数中调用 androidFCMChannelID 设置),然后在登录之前配置推送通道。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val nm = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationChannel =
NotificationChannel("channelId", "channelName", NotificationManager.IMPORTANCE_HIGH)
notificationChannel.enableLights(true)
notificationChannel.enableVibration(true)
notificationChannel.setShowBadge(true)
notificationChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
// "android.resource://包名/raw/private_ring"
notificationChannel.setSound(Uri.parse("sound"), null)
nm.createNotificationChannel(notificationChannel)
}
val pushInfo = OfflinePushInfo()
pushInfo.title = "Mike" pushInfo.desc = "You have a new call"
pushInfo.androidSound = "private_ring"
pushInfo.iosSound = "private_ring.mp3"
pushInfo.androidFCMChannelID = "channelId"

val params = TUICallDefine.CallParams()
params.offlinePushInfo = pushInfo

val list = mutableListOf<String>()
list.add("Mike")
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Video, params, callback)
注意
FCM 的数据消息可以实现类似VOIP 的通知机制,详情见:FCM VoIP(数据消息),通知消息和数据消息可以相互切换。TUICallKit 默认所有通话请求以 VoIP 的形式推送
FCM 自定义铃声或者设置 channel id 仅支持证书模式。


Android 8.0 之前,调用setAndroidSound() 和 setIOSSound() 接口设置铃声。
Android 8.0 之后,先在厂商控制台 创建 OPPO 私信通道,然后在 即时通信 IM 控制台中配置 channelID(或在参数中调用 androidFCMChannelID 设置),最后在登录之前配置推送通道。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val nm = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationChannel =
NotificationChannel("channelId", "channelName", NotificationManager.IMPORTANCE_HIGH)
notificationChannel.enableLights(true)
notificationChannel.enableVibration(true)
notificationChannel.setShowBadge(true)
notificationChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
// "android.resource://包名/raw/private_ring"
notificationChannel.setSound(Uri.parse("sound"), null)
nm.createNotificationChannel(notificationChannel)
}
kotlin
java
val pushInfo = OfflinePushInfo()
pushInfo.title = "Mike"
pushInfo.desc = "You have a new call"
pushInfo.androidSound = "private_ring"
pushInfo.iosSound = "private_ring.mp3"
pushInfo.androidOPPOChannelID = "channelId"

val params = TUICallDefine.CallParams()
params.offlinePushInfo = pushInfo

val list = mutableListOf<String>()
list.add("Mike")
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Video, params, callback)
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setTitle("Mike");
pushInfo.setDesc("You have a new call");
pushInfo.setAndroidSound("private_ring");
pushInfo.setIOSSound("private_ring.mp3");
pushInfo.setAndroidOPPOChannelID("channelID");

TUICallDefine.CallParams params = new TUICallDefine.CallParams();
params.offlinePushInfo = pushInfo;

List<String> list = new ArrayList<>();
list.add("Mike");
TUICallKit.createInstance(context).calls(list, TUICallDefine.MediaType.Video, params, callback);

自定义角标

目前仅华为支持收到离线消息或通话请求时生成角标,其他厂商暂不支持,详见:自定义角标

常见问题

1. 若在集成过程中遇到问题,请务必先查阅 插件推送-常见问题 进行自助排查。
2. 条件说明:部分厂商要求必须上架应用市场才可以正常使用推送服务,详情参见下表:
厂商通道
是否需要上架
账号说明
小米
需要注册企业开发者账号
VIVO
需要注册企业开发者账号
OPPO
需要注册企业开发者账号
荣耀
需要注册企业开发者账号
华为
个人开发者账号即可
魅族
个人开发者账号即可

交流与反馈

如有问题,欢迎您加入我们的 TUICallKit 技术交流平台 zhiliao,进行技术交流和产品沟通。