鸿蒙 消息推送:Push Token的获取(四)
·
一、Push Token
Push Token标识了每台设备上每个应用,通过调用getToken()接口向Push Kit服务端请求Push Token,获取到之后使用Push Token来推送消息。
Push Token变化场景
Push Token一般情况不会变化,以下场景会导致Push Token发生变化而失效:
| 场景 | 说明 |
|---|---|
| 卸载后重新安装 | Push Token失效 |
| 设备恢复出厂设置 | Push Token失效 |
显式调用deleteToken()后重新调用getToken() |
Push Token发生变化 |
显式调用deleteAAID()后重新调用getToken() |
Push Token发生变化 |
| 设备(仅Wearable)拿到海外其他国家或地区 | 系统自动更新token,通过tokenUpdate回调返回 |
建议:在应用启动时调用getToken()接口,若Push Token发生变化,及时上报到应用服务器更新,以防收不到消息。
二、版本支持情况
| 设备类型 | 支持版本 |
|---|---|
| Phone | 支持 |
| Tablet | 支持 |
| PC/2in1 | 支持 |
| Wearable | 5.1.0(18)+ |
| TV | 5.1.1(19)+ |
三、注意事项
| 注意事项 | 说明 |
|---|---|
| 不要用于用户跟踪 | 请勿使用Push Token跟踪标记用户 |
| 不要固定长度判断 | Push Token长度可能会变化 |
| 申请频率 | 禁止频繁申请,建议每次启动时获取 |
| 前提条件 | 只有在AGC平台开通推送服务后,getToken才会返回Push Token |
四、核心接口
| 接口 | 描述 |
|---|---|
getToken() |
获取Push Token(Promise/Callback) |
deleteToken() |
删除Push Token(Promise/Callback) |
on('tokenUpdate', callback) |
注册Token更新回调 |
off('tokenUpdate') |
解除Token更新回调 |
五、获取Push Token
5.1 开发前提
Push Kit对Push Token进行了权益校验,请在进行开发前先完成开通推送服务相关配置。
5.2 导入模块
import { pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
5.3 在UIAbility中获取Push Token
建议在UIAbility(例如EntryAbility)的onCreate()方法中调用getToken()接口获取Push Token并上报到服务端。
// 文件路径: src/main/ets/entryability/EntryAbility.ets
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 获取Push Token
pushService.getToken().then(token => {
hilog.info(0x0000, 'testTag', 'Succeeded in getting push token');
// 上报Push Token到您的服务端
}).catch((err: BusinessError) => {
hilog.error(0x0000, 'testTag', 'Failed to get push token: %{public}d %{public}s', err.code, err.message);
});
}
}
六、删除Push Token
// 文件路径: src/main/ets/entryability/EntryAbility.ets
export default class EntryAbility extends UIAbility {
async myDeletePushToken() {
try {
await pushService.deleteToken();
hilog.info(0x0000, 'testTag', 'Succeeded in deleting push token');
} catch (err) {
let e: BusinessError = err as BusinessError;
hilog.error(0x0000, 'testTag', 'Failed to delete push token: %{public}d %{public}s', e.code, e.message);
}
}
}
注意:删除Push Token后,本应用下的所有Push Kit历史数据会一并删除。非必要情况,请不要主动调用deleteToken()接口。
七、Push Token更新回调
7.1 支持设备
| 设备类型 | 支持版本 |
|---|---|
| Wearable | 支持 |
| Phone、Tablet、PC/2in1 | 6.1.0(23)+ |
7.2 注册Token更新回调
当设备离开当前国家或地区时,可能会触发Push Token自动更新。应用需要调用on接口进行回调注册。
// 文件路径: src/main/ets/abilities/PushMessageAbility.ets
import { UIAbility } from '@kit.AbilityKit';
import { pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
const callBack = (data: string) => {
try {
hilog.info(0x0000, 'testTag', 'update token: %{public}s', data);
} catch (e) {
let err: BusinessError = e as BusinessError;
hilog.error(0x0000, 'testTag', 'Failed to update data: %{public}d %{public}s', err.code, err.message);
}
};
try {
// 注册token更新回调场景
pushService.on('tokenUpdate', this, callBack);
hilog.info(0x0000, 'testTag', 'Register on success');
} catch (e) {
let err: BusinessError = e as BusinessError;
hilog.error(0x0000, 'testTag', 'Register on error: %{public}d %{public}s', err.code, err.message);
}
}
onDestroy(): void {
try {
// 解除注册token更新回调场景
pushService.off('tokenUpdate');
hilog.info(0x0000, 'testTag', 'Register off success');
} catch (e) {
let err: BusinessError = e as BusinessError;
hilog.error(0x0000, 'testTag', 'Register off error: %{public}d %{public}s', err.code, err.message);
}
}
}
7.3 module.json5配置
在src/main/module.json5文件的abilities模块中配置skills标签,添加action.ohos.push.listener(有且只能有一个ability定义该action)。
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/abilities/PushMessageAbility.ets",
"launchType": "singleton",
"exported": false,
"skills": [
{
"actions": [
"action.ohos.push.listener"
]
}
]
}
]
更多推荐





所有评论(0)