一、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"
        ]
      }
    ]
  }
]

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐