注意:
使用 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 推送不支持自定义的提示音。
本页内容是否解决了您的问题?