鸿蒙 消息推送: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"
        ]
      }
    ]
  }
]
相关推荐
梦想不只是梦与想1 小时前
鸿蒙 预览数据模拟:Hamock
harmonyos·模拟数据·hamock
贾伟康4 小时前
【化学实验室|04】HarmonyOS ArkTS 场景选择器实战:让 13 个离线实验的入口、筛选和返回路径保持一致
harmonyos·arkts·canvas·arkui·化学实验
特立独行的猫a4 小时前
仓颉语言GUI开发实战:用仓颉写串口/网络二合一调试助手
网络·ui·gui·harmonyos·tauri·仓颉
hqzing14 小时前
把 glibc 移植到鸿蒙 PC 上:它能用来做什么
华为·harmonyos
OH_TPC20 小时前
HarmonyOS APP开发---“习惯猫“习惯打卡App,需要用到这个库
华为·harmonyos·鸿蒙
熊猫钓鱼>_>1 天前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
马剑威(威哥爱编程)1 天前
【共创稿事节】HarmonyOS 7 Agent 开发实战 09:Agent 测试评测集
华为·harmonyos
威哥爱编程1 天前
HarmonyOS 7 Agent 开发实战 04:云端 RAG 搭企业私有知识库问答
agent·harmonyos
威哥爱编程1 天前
HarmonyOS 7 Agent 开发实战 05:流式输出做打字机对话
agent·harmonyos
donk13141 天前
React Native for OpenHarmony 实战:三方库 react-native-circular-action-menu 的鸿蒙化适配指南
javascript·分布式·react native·react.js·wpf·harmonyos