即时通信 IM 的终端用户需要随时都能够得知最新的消息,而由于移动端设备的性能与电量有限,当 App 处于后台时,为了避免维持长连接而导致的过多资源消耗,即时通信 IM 推荐您使用各厂商提供的系统级推送通道来进行消息通知,系统级的推送通道相比第三方推送拥有更稳定的系统级长连接,可以做到随时接受推送消息,且资源消耗大幅降低。
注意:
- 在没有主动退出登录的情况下,应用退后台、手机锁屏、或者应用进程被用户主动杀掉三种场景下,如果想继续接收到 IM 消息提醒,可以接入即时通信 IM 离线推送。
- 如果应用主动调用 logout 退出登录,或者多端登录被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。
集成 react-native-tim-push
之前,请您先 登录腾讯云账号进行 IM 控制台配置 和 配置离线推送跳转界面。之后按照如下步骤操作即可快速接入 IM 离线推送。
注意:
- 请在登录后初始化插件。
- 组件支持的厂商有:小米、华为、OPPO、vivo、魅族和 Google FCM。
- 苹果请参考官方插件:react-native-push-notification。
// using npm
npm i react-native-tim-push --save
// using yarn
yarn add react-native-tim-push
android {
...
defaultConfig {
...
manifestPlaceholders = [
"VIVO_APPKEY" : "您应用分配的证书 APPKEY",
"VIVO_APPID" : "您应用分配的证书 APPID"
]
}
}
华为和 Google FCM 适配
华为和 Google FCM 需要按照厂商方法,集成对应的 plugin 和 json 配置文件。
repositories {
...
// 配置 HMS Core SDK 的 Maven 仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
classpath 'com.google.gms:google-services:4.2.0'
classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.huawei.agconnect'
推送证书添加成功之后,IM 控制台会为您分配一个证书 ID,请您在初始化插件时传入,该证书 ID 会在注册推送服务和上报 token 时使用。
填充的参数如下:
import { TimPushPlugin } from 'react-native-tim-push';
import { LogLevelEnum, TencentImSDKPlugin } from 'react-native-tim-js';
const cPush = new TimPushPlugin();
const login = () => {
const userID = ""; // userID
const userSig = ""; // userSig
const res = await TencentImSDKPlugin.v2TIMManager.login(userID, userSig);
// 判断是否登录成功
if (res.code === 0) {
// 初始化离线推送插件
initPushPlugin();
}
}
const initPushPlugin = () => {
cPush.init({
mi_buz_id: 5218, // 在腾讯云控制台分配的证书ID
mi_push_app_id: '', //小米开放平台分配的应用APPID
mi_push_app_key: '', //小米开放平台分配的应用APPKEY
});
}
以上步骤完成后,就可以收到离线推送通知了。
发送消息时,请您设置离线推送参数,具体请参见 发消息时设置离线推送参数。
import { TencentImSDKPlugin } from 'react-native-tim-js';
// 创建文本消息
const createTextMessage = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage("test");
if(createTextMessage.code == 0){
String id = createTextMessage.data.id;
// 发送文本消息
const sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "", offlinePushInfo: {
title = '', // 推送通知标题。留空字符串时,按照优先级,IM后台自动替换成 sender的昵称 => sender ID。因此,如无特殊需求,该字段议留空
desc = '', // 推送第二行小字部分
disablePush = false,
ext = '', // 推送内额外信息,对方可于单击通知跳转时拿到。建议传含Conversation信息的JSON,用于收件方跳转至对应Chat。可参见下方TUIKit的实例代码。
androidOPPOChannelID = '', // OPPO的channel ID
});
if(sendMessageRes.code == 0){
// 发送成功
}
}
OPPO 手机收不到推送一般有以下几种情况:
自定义消息的离线推送和普通消息不太一样,自定义消息的内容我们无法解析,不能确定推送的内容,所以默认不推送,如果您有推送需求,需要您在 sendMessage 的时候设置 offlinePushInfo 的 desc 字段,推送的时候会默认展示 desc 信息。
离线推送的直观表现就是通知栏提示,所以同其他通知一样受设备通知相关设置的影响,以华为为例:
本页内容是否解决了您的问题?