推送开发-客户端
提示
鸿蒙的推送已经整合到鸿蒙系统中,在正确的获取到推送 token 前的所有步骤,需要开发者自行去鸿蒙平台操作,如有疑问向鸿蒙平台提工单咨询具体的原因。
鸿蒙管理后台配置推送
客户端配置推送,需要先确保已经 鸿蒙后台推送配置 和 融云后台推送配置 已完成
也可以参考鸿蒙的推送服务文档。
APP 申请通知权限
App 申请通知权限,可以在手机 设置>应用和服务>应用管理 中查看 APP 的通知权限。如果没有申请通知权限,收到的推送无法在通知栏出现。
详情请参考鸿蒙的请求通知授权文档。
APP 获取推送 token
鸿蒙系统已经内置获取推送 token 的逻辑,不需要像 Android 平台一样依赖各个手机厂商的推送 SDK
获取推送 token 失败时,请根据错误码对照鸿蒙ArkTS API 错误进行排查。如果您不确定具体的错误,可以向鸿蒙提工单咨询具体的报错信息。
参考:获取鸿蒙推送 token
// 在 EntryAbility.ets 中
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'IM-ArkTS', 'Get message data successfully: %{public}s', JSON.stringify(want.parameters));
hilog.info(0x0000, 'IM-ArkTS', '%{public}s', 'Ability onCreate');
pushService.getToken((error: BusinessError, token: string) => {
hilog.info(0x0000, 'IM-ArkTS', 'getPushToken error:%{public}s token:%{public}s', error, token);
if (token) {
// 推送 token
IMEngine.getInstance().setPushToken(token);
} else {
// 获取推送 token 错误,根据 code 值请向鸿蒙提工单咨询具体原因
let code = error.code;
}
});
}
IMSDK 设置推送 token
此步骤为 IMSDK 处理
在正常获取推送 token 后,把推送 token 设置给 IMSDK
// 见 IMEngine.ts
/**
* 设置鸿蒙推送 token
* ```
* 1. SDK 初始化之前设置:SDK 会将推送 token 缓存,连接成功后上报
* 2. SDK 初始化之后连接之前设置:连接成功后上报
* 3. SDK 连接成功后设置:SDK 立即上报
* ```
* @param pushToken 推送 token
*/
public setPushToken(pushToken: string): void
// 设置推送 token
IMEngine.getInstance().setPushToken(token);
点击推送唤起 APP
获取推送数据
// 鸿蒙推送示例内容
{
"_push_notifyid": 1590297100,
"component.startup.newRules": true,
"debugApp": false,
"isCallBySCB": false,
"moduleName": "entry",
"ohos.aafwk.param.callerAbilityName": "PushServiceInnerAbility",
"ohos.aafwk.param.callerBundleName": "com.huawei.hms.pushservice",
"ohos.aafwk.param.callerPid": 39626,
"ohos.aafwk.param.callerToken": 537231324,
"ohos.aafwk.param.callerUid": 20004,
"ohos.ability.launch.reason": 1,
"ohos.dlp.params.sandbox": false,
"rc": "{\"conversationType\":\"1\",\"targetId\":\"1234\",\"sourceType\":\"0\",\"fromUserId\":\"1234\",\"voip\":\"0\",\"objectName\":\"RC:TxtMsg\",\"msgTime\":\"1717732211751\",\"id\":\"CFU3-8NO9-O305-DBM8\",\"bId\":\"\",\"tId\":\"0987\"}",
"send_to_erms_targetAppDistType": "none",
"send_to_erms_targetAppProvisionType": "debug",
"send_to_erms_targetBundleType": 0
}
此处为鸿蒙推送从 want.parameters 中获取到的数据, rc 中的字段描述如下
- conversationType : 会话类型
- targetId : 会话 id
- fromUserId : 发送方 id
- objectName : 消息类型
- msgTime : 消息发送时间
- id : 消息 uid