离线唤醒功能,能够让您的 应用在后台运行
或者离线状态
下依然能够收到音视频通话的响铃呼叫,TUICallKit 集成了 TUIOfflinePush 组件实现离线唤醒功能,本文将介绍如何在音视频通话项目中集成TUIOfflinePush
组件。 前期准备
1. 注册应用到厂商推送平台
离线推送功能依赖厂商原始通道,您需要将自己的应用注册到各个厂商的推送平台,得到 APPID 和 APPKEY 等参数。
下述两个文件在后续步骤会用到:
注册华为平台的时候,下载 agconnect-services.json
文件,并保存。
注册 Google 平台的时候,下载 google-services.json
文件,并保存。
2. 在 IM 控制台进行配置
注册厂商通道需要传入自己的包名,各厂商填入的包名需保持一致,用于消息互通。具体请参见 离线推送(Android) 中的步骤二,记录生成的 ID,APPID 以及 APPKEY,他们会在后续步骤中用到。
以Google为例,推送证书 ID 如下: 步骤一:下载并导入组件
1. 在 Github 中克隆/下载代码,然后拷贝 Android 目录下的 tuiofflinepush 子目录到您当前工程中的 app 同级目录中,如下图: 2. 在工程根目录下找到 settings.gradle
文件,并在其中增加如下代码:
include ':tuiofflinepush'
3. 在 app 目录下找到 build.gradle
文件,并在其中增加如下代码,它的作用是声明当前 app 对新加入的 tuiofflinepush 组件的依赖:
api project(':tuiofflinepush')
步骤二:完成工程配置
1. 在 app 目录下,找到 build.gradle
文件,修改应用包名为自己的包名。
applicationId 'com.****.trtc'
2. 在 app 目录下,找到 build.gradle
文件,设置 ViVo
接入参数 VIVO_APPKEY
、VIVO_APPID
以及HONOR_APPID
,避免编译或运行报错。
manifestPlaceholders = [
"VIVO_APPKEY": "PLACEHOLDER",
"VIVO_APPID" : "PLACEHOLDER",
"HONOR_APPID": "PLACEHOLDER"
]
3. 配置 华为 和 谷歌 文件:
在 app 目录下,替换 google-services.json
文件,该文件为您在 前期准备 注册 Google 平台的时候保存的文件。
在 app 目录下,增加 agconnect-services.json
文件,该文件为您在 前期准备 注册华为平台的时候下保存的文件。 4. 将 前期准备 记录的 ID、APPID 和 APPKEY 填入 PrivateConstants
文件中,并检查参数是否配置正确。填充的参数如下: public class PrivateConstants {
public static final long XM_PUSH_BUZID = 您应用分配的证书 ID;
public static final String XM_PUSH_APPID = "您应用分配的 APPID";
public static final String XM_PUSH_APPKEY = "您应用分配的 APPKEY";
}
完成以上步骤,您的工程就具备了 TUICallKit
的离线唤醒功能。
步骤三:自定义离线通知内容
public static TUICallDefine.OfflinePushInfo createOfflinePushInfo(Context context) {
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setTitle("mike");
pushInfo.setDesc("You have receive a new call");
pushInfo.setAndroidOPPOChannelID("tuikit");
pushInfo.setIgnoreIOSBadge(false);
pushInfo.setIOSSound("phone_ringing.mp3");
pushInfo.setAndroidSound("phone_ringing");
pushInfo.setAndroidVIVOClassification(1);
pushInfo.setAndroidFCMChannelID("fcm_push_channel");
pushInfo.setAndroidHuaWeiCategory("IM");
pushInfo.setIOSPushType(TUICallDefine.IOSOfflinePushType.APNs);
return pushInfo;
}
步骤四:自定义离线通知铃音
离线通知铃声仅支持以下厂商自定义:华为、小米、FCM 和 APNs,其他厂商 OPPO、VIVO、荣耀等暂不支持。
TUICallKit 引入了 TUIOfflinePushPush 组件,需在应用启动的时,调用以下方法开启离线通知自定义铃音能力。
public class DemoApplication extends Application {
@Override
public void onCreate() {
TUIOfflinePushConfig.getInstance().setAndroidPrivateRing(true);
}
}
1、华为 & APNs
调用接口 setAndroidSound() 和 setIOSSound()。
定制铃音资源文件,将铃音文件添加到本地 Android Studio 工程 res/raw 目录下。参考 步骤三 设置铃声。
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setIOSSound("铃声名称.mp3");
pushInfo.setAndroidSound("铃声名称");
注意
IMSDK 6.1.2155 及以上版本支持。
2、小米
(1)Android 8.0 之前,调用setAndroidSound() 和 setIOSSound()。定制铃音资源文件,将铃音文件添加到工程 res/raw 目录下(参考上述华为调用)。
(2)Android 8.0 之后,还需要登录小米厂商控制台并创建channel并做好配置,其中铃音文件需要添加到本地 Android Studio 工程的 res/raw 目录下。 TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setIOSSound("铃声名称.mp3");
pushInfo.setAndroidSound("铃声名称");
pushInfo.setAndroidXiaoMiChannelID("厂商申请的channelID");
注意
Android 8.0之前的方式,IMSDK 6.1.2155 及以上版本支持。
Android 8.0之后的方式,IMSDK 7.0.3754 及以上版本支持。
3、FCM
(1)Android 8.0 之前,调用 setAndroidSound() 和 setIOSSound()。定制铃音资源文件,将铃音文件添加到工程 res/raw 目录下(参考上述华为调用)。
(2)Android 8.0之后,FCM 需要配置 channelID 以及铃音资源,TUICallKit 引入的 tuiofflinepush 组件已经处理了自定义铃声的播放。铃音文件需要添加到您本地 Android Studio 工程的 res/raw 目录下,并指定铃音名称和 channel ID 的名称,详见 PrivateConstants。 public class PrivateConstants {
public static String fcmPushChannelId = "FCM ChannelID";
public static String fcmPushChannelSoundName = "铃声名称";
}
TUICallDefine.OfflinePushInfo pushInfo = new TUICallDefine.OfflinePushInfo();
pushInfo.setIOSSound("铃声名称.mp3");
pushInfo.setAndroidSound("铃声名称");
pushInfo.setAndroidFCMChannelID("厂商申请的channelID");
注意
Android 8.0之前的方式,IMSDK 6.1.2155 及以上版本支持。
Android 8.0之后的方式,IMSDK 7.0.3754 及以上版本支持。
FCM 自定义铃声或者设置 channnel id 仅支持证书模式。
常见问题
1、收不到通知
用厂商控制台进行推送测试,能成功说明厂商通道没有问题。再检查 TUIOfflinePush 控制台厂商参数配置是否正确,按要求进行填写。(经测试:vivo x9必须在控制台配置消息类别)。
部分手机收到通知会放到不重要的通知
中,请下拉状态栏,检查是否归纳到 不重要的通知
中。
检查 TUIOfflinePush 注册是否成功,过滤以下日志:
2、锁屏时无法点亮屏幕
Android 手机由于厂商和平台的限制,在锁屏情况下需要不同的权限。请按以下情况进行排查。
确认打开厂商锁屏下通知权限
部分厂商统一做了约束,例如小米锁屏下离线通知到达时未亮屏:在设置 > 锁屏里,单击开关锁屏来通知时亮屏,打开开关。
确认打开应用锁屏通知权限
例如:小米需要锁屏显示权限。
3、单击离线推送通知,拉不起通话界面
需要检查下是否查到了通话请求,可以过滤以下日志:
4、应用在后台时,不能自动将通话界面拉取到前台
将应用从后台自动拉取到前台,需要检查 App 是否开启了”后台自启动“或”悬浮窗“权限。
值得注意的是,不同厂商、甚至同一厂商不同 Android 版本,其对于应用开放的权限以及权限名称也会存在不一致。例如,小米6只需要开启后台弹出界面权限,而红米需要同时打开后台弹出界面和显示悬浮窗权限。
说明:
如果您在测试过程中发现手动开启了所有权限,依然无法自动拉起通话界面到前台,需要做兼容处理。
5、角标问题
目前仅 华为 支持收到离线消息时生成角标,其他厂商暂不支持。华为设置角标方法详见其官方文档:华为桌面角标开发指导。 public void updateBadge(final Context context, final int number) {
if (BrandUtil.getInstanceType() != TUIOfflinePushConfig.BRAND_HUAWEI) {
return;
}
try {
Bundle extra = new Bundle();
extra.putString("package", context.getPackageName());
extra.putString("class", PrivateConstants.huaweiBadgeClassName);
extra.putInt("badgenumber", number);
context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, extra);
} catch (Exception e) {
}
}
如果想要清除角标,可以在适当的时机调用该方法,将角标设置为0。
本页内容是否解决了您的问题?