鸿蒙 消息推送: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"
        ]
      }
    ]
  }
]
相关推荐
钉先生贾3 小时前
性能、体积与稳定性:怎样写出可信的适配结论
华为·harmonyos
笑 总不会犯错8 小时前
摆脱多端数据撕裂,鸿蒙分布式数据库同步与冲突合并
harmonyos
用户117910488338 小时前
鸿蒙签名失败不是玄学:5 个证据点把 hapsigntool 一次排通 GitHub:swsgbl/hmharness
开源·ai编程·harmonyos
redtank200011 小时前
纯血鸿蒙小工具三件套实测:弹幕手持、爱记录与仓库管理软件
学习·华为·智能手机·harmonyos
用户86194177207411 天前
uni-app 的蓝牙 API 在鸿蒙上不生效?我写了个兼容层,让老代码零改动跑起来
harmonyos
HarmonyOS_SDK1 天前
【HarmonyOS SDK Skills】挂载 Agent Skill,轻松跑通鸿蒙应用广告变现
harmonyos
闫东阳LordGalaxy1 天前
给小艺装上数学能力:数易 App 接入智能体 FunctionComponent 与 A2A 双通路实战
harmonyos
Dream-Y.ocean1 天前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos
OH_TPC1 天前
HarmonyOS APP开发---"好物清单"购物清单App,需要用到这个库
harmonyos
贾伟康1 天前
【鸿蒙心迹】个人开发者上架复盘:备案、合规与审核指南没写透的细节
华为·harmonyos