注意:使用 FCM 离线推送需要手机端安装 Google Play Services 且在中国大陆地区以外使用。
实现离线消息推送的过程如下:
说明:本步骤中的网址为 Firebase 官方网址,需要在中国大陆地区以外才能访问。
说明:如果您原来已有证书只需变更信息,可以单击对应证书区域的【编辑】进行修改更新。
ID
。在用户登录成功后通过TIMManager
中的setOfflinePushToken
方法将您托管到即时通信 IM 控制台生成的证书 ID 及集成 FCM 后在客户端生成的 token 上报到即时通信 IM 服务端。
注意:正确上报 token 与证书 ID 后,即时通信 IM 服务才能将用户与对应的设备信息绑定,从而使用 FCM 进行推送通知。
以下为 Demo 中的示例代码:
定义证书 ID 常量:
/****** FCM 离线推送参数 start ******/
// 使用您在即时通信 IM 控制台上 FCM 推送证书信息里的证书 ID
public static final long GOOGLE_FCM_PUSH_BUZID = 6768;
/****** FCM 离线推送参数 end ******/
上报推送的证书 ID 及 token:
/**
* 在 ThirdPushTokenMgr.java 中对推送的证书 ID 及设备信息进行上报操作
*/
public class ThirdPushTokenMgr {
private static final String TAG = "ThirdPushTokenMgr";
private String mThirdPushToken;
public static ThirdPushTokenMgr getInstance () {
return ThirdPushTokenHolder.instance;
}
private static class ThirdPushTokenHolder {
private static final ThirdPushTokenMgr instance = new ThirdPushTokenMgr();
}
public String getThirdPushToken() {
return mThirdPushToken;
}
public void setThirdPushToken(String mThirdPushToken) {
this.mThirdPushToken = mThirdPushToken; // token 在此处传值
}
public void setPushTokenToTIM(){
String token = ThirdPushTokenMgr.getInstance().getThirdPushToken();
if(TextUtils.isEmpty(token)){
QLog.i(TAG, "setPushTokenToTIM third token is empty");
mIsTokenSet = false;
return;
}
TIMOfflinePushToken param = new TIMOfflinePushToken(Constants.GOOGLE_FCM_PUSH_BUZID, token);
TIMManager.getInstance().setOfflinePushToken(param, new TIMCallBack() {
@Override
public void onError(int code, String desc) {
Log.d(TAG, "setOfflinePushToken err code = " + code);
}
@Override
public void onSuccess() {
Log.d(TAG, "setOfflinePushToken success");
mIsTokenSet = true;
}
});
}
}
成功上报证书 ID 及 token 后,即时通信 IM 服务端会在该设备上的即时通信 IM 用户 logout 之前、App 被 kill 之后将消息通过 FCM 推送通知到用户端。
说明:
- FCM 推送并非100%必达。
- FCM 推送可能会有一定延时,通常与 App 被 kill 的时机有关,部分情况下与 FCM 推送服务有关。
- 若即时通信 IM 用户已经 logout 或被即时通信 IM 服务端主动下线(例如在其他端登录被踢等情况),则该设备上不会再收到消息推送。
在发消息前设置每条消息的通知栏自定义内容。
Android 端示例如下:
String extContent = "ext content";
TIMMessageOfflinePushSettings settings = new TIMMessageOfflinePushSettings();
settings.setExt(extContent.getBytes());
timMessage.setOfflinePushSettings(settings);
mConversation.sendMessage(false, timMessage, callback);
服务端示例请参见 OfflinePushInfo 的格式示例。
当点击通知栏的消息时,客户端在相应的 Activity
中获取自定义内容。
Bundle bundle = getIntent().getExtras();
String value = bundle.getString("ext");
目前 FCM 推送不支持自定义的提示音。
上周,我们发布了2020年Q3财报,业绩一路UP!涨势喜人的背后,离不开一群敬业的产...
当存储库存储容量超过上限后,系统将不会继续执行备份,不会出现新备份覆盖旧备...
本页面汇总了腾讯云Oceanus流计算 (Flink实时计算) 产品的最佳实践和解决方案文...
六月流火,燃情夏季!值此年中节点之际,阿里云开启了618年中大促活动的序幕,从...
如今,越来越多的企业依靠人工智能技术为运营业务提供帮助。这项技术非常具有建...
1月21日,由国内知名第三方咨询机构艾瑞咨询主办的金瑞营销奖正式揭晓。其中,汇量...
随着数字化转型和云化的不断发展,各企业也正在将其基础架构扩展到更大的规模。...
网站 域名 怎么注册?域名是网站在互联网中的门牌号,便于用户识别和记...
功能介绍 内容分发网络(CDN)通过对 CDN 访问日志的实时采集与推送,可实现对日...
有没感觉 Go 的 sync 包不够用?有没遇到类型没有 sync/atomic 支持? 我们一起...