鸿蒙 消息推送: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"
        ]
      }
    ]
  }
]
相关推荐
伶俜666 小时前
鸿蒙原生应用实战(十八)ArkUI 记账本:SQLite 账单 + 图表统计 + 分类管理
jvm·sqlite·harmonyos
Davina_yu7 小时前
自定义弹窗:使用CustomDialogController实现复杂交互(27)
harmonyos·鸿蒙·鸿蒙系统
Swift社区7 小时前
当 AI 接管游戏世界:鸿蒙游戏 Workspace Runtime 架构揭秘
人工智能·游戏·harmonyos
世人万千丶8 小时前
家庭记账本小应用 - HarmonyOS ArkUI 开发实战-Tabs与List组件-PC版本
华为·list·harmonyos·鸿蒙
至乐活着8 小时前
HarmonyOS开发深度解析:网络请求与数据持久化实战全攻略
网络请求·harmonyos·arkts·数据持久化·鸿蒙开发
星释8 小时前
鸿蒙智能体开发实战:3.创建工作流
华为·harmonyos·智能体
hahjee8 小时前
【鸿蒙 PC三方库构建系统】解决 OpenHarmony SHA 库编译问题:从动态链接错误到静态链接优化
华为·harmonyos
伶俜668 小时前
鸿蒙原生应用实战(二十)ArkUI 课程表 App:Grid 网格 + SQLite 存储 + 周次切换 + 上课提醒
华为·sqlite·harmonyos
AI周红伟8 小时前
华为发布DevEco Code:鸿蒙开发步入AI Agent“自动驾驶”时代
人工智能·华为·harmonyos
Davina_yu8 小时前
画布Canvas:2D绘图上下文(Context2D)绘制复杂图表(33)
harmonyos·鸿蒙·鸿蒙系统