HarmonyOS 鸿蒙Next中验证deviceToken

HarmonyOS 鸿蒙Next中验证deviceToken 校验设备token的时候,提示失败,但是不知道这个deviceToken要传什么样的格式的,需要求助


更多关于HarmonyOS 鸿蒙Next中验证deviceToken的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

【背景知识】

checkDeviceToken返回的错误码有以下几种:

错误码 描述
OK 请求处理成功。
InvalidDeviceToken deviceToken缺失或不合法。
DeviceTokenExpired deviceToken过期。
InvalidTimeStamp timeStamp缺失或不合法。
InternalServerError 服务器内部错误。
InvalidBundleName bundleName缺失或不合法。

【解决方案】

针对deviceToken缺失或者不合法问题,要从deviceToken生成和请求发送过程进行分析。

import { deviceCertificate } from '@kit.DeviceSecurityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

const TAG = "DeviceCertificateJsTest";

export function getDeviceToken(): string {
  let res = '';
  try {
    deviceCertificate.getDeviceToken().then((token) => {
      hilog.info(0x0000, TAG, 'Succeeded in executing getDeviceToken');
      console.info('token:' + token);
    }).catch((err: BusinessError) => {
      hilog.error(0x0000, TAG, 'getDeviceToken failed!  %{public}d %{public}s', err.code, err.message);
    });
  } catch (err) {
    let error: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'getDeviceToken failed!  %{public}d %{public}s', error.code, error.message);
  }
  return res;
}
  • 检查deviceToken参数类型,deviceToken类型参数需要定义为String类型。

  • 检查deviceToken生成时间,防止失效。deviceToken由Device Security Kit加密生成,每次调用生成Token均不一样,有效期1小时。

  • 请求发送过程:

    • 检查是否正确获取凭证Token,详情请参见基于服务账号生成鉴权令牌
    • 检查消息体构造是否正确。请求构造过程需要构造请求消息体时,消息体需要在外层包一层data结构。详情参考如下调用示例:
post /api/rms/v1/deviceVerify/checkDeviceToken HTTP/1.1
Host: xxx
Authorization: Bearer eyJraWQiOiIzZjc1MTJkZDcyYmY0Njk5OGNjMjNhOWU1OTlmOGZkNCIsInR5cCI6IkpXVCIsImFsZyI6IlBTMjU2In0.eyJhdWQiOiJodHRwczovL29hdXRoLWxvZ2luLmNsb3VkLmh1YXdlaS5jb20vb2F1dGgyL3YzL3Rva2VuIiwiaXNzIjoiMTEzODQ2Mzg3IiwiZXhwIjoxNzQzNTE3OTQzLCJpYXQiOjE3NDM1MTQzNDN9.hVU1kDWUAWI2XDLX4sq2egv7hsGRLiszNiuiSUbVC-nKlhKehDEe7aXPfhkQ8JYm_m-zi2-GDOLIWvMTtyL3gkn00dUpRlJJa8h-m-tOrfUluor9IcP31NVB_5utXGSo7r33M3y1xpJOnq_3abNhs8vg2UJgPg62ViA76NvzSKijhq9UwPuQzDVjzS1nOz6vmlMxme9QIIS5O3bC4S6C7Yh4Am4kfcR0bbZ-QMn7Y8GgckNhcfMcq2gAberF_zoAUjQ43KfBnu0F_mkFmfCYGO9rTiyWj34zaHCVS55wyKc2B-6L2xshWyEKicz39WYSt1HZHWMmUWbKHiMBsr_jqHZ3zxhP_2O8TLtZ0LgDQGDbOp5fv-sgzJmAGbGsZUA7IG63oUx38SHI9QNC2ha32179CEds2WiMmrGr6Bk9QeeHzm7T5CahZx3n-U1YJTqQJbJwyneFlhnWnEZJ0W8xMMM2TgCZGwPScuMQmYDH6UPCQmLpYih3uESBB1qTCVntzkBU-w9y2pwDxsq1IL2m4nZTD2bToPMlGpCOW_YULO1soawW_4S7i57J1T4lbndVVFFEIywVUpdE5bUu-kNY_U2Ouwkrk2GseBau_vrnC3BkRk_U6IS4BvOsDp6rUeKzVt9PVgm_RWWKHnHWEDvCS7mtO-68JB1rJMRBEP-Xfxg
bundleName: com.huawei.xxx
Content-Type: application/json;charset=utf-8
{
  "data": {
    "deviceToken":"aes-gcm.lK5BS3WmrSzPK3tsHHRdWVMUP4vgO8mgRNVn0ikkOPbhTGe7ppuEOOn7uFtOFScBXU4ATGxzcz89H9Fk1C0h55YvsOnN6AJ3RslgYhyTNIdjkJ7XjfJFZeVwTIFaH+zixzxNeR+wDDZ3T0gGBJWfx1lLoO4I7W2Fu1DscLQPOtA4uz+YDm1Hk3Lx1axl5api02qoI9VUm9D5NIxrQHPwuSvR4zaVpmub/ib2owvELjKkckimdSHrcjMsDYYVrDrSbIgu/KmU/1Hx2tK+yL4tsD3jKGZ0BbKfAf1GZ7HnACEyjRW9bqdzlf4wV2Uoe29Y7m9yG2ykmXhNea5NGSMcHZ1cCaU6w/FjQHm+d1r0gHzcqkMi/4Pe2CPvoljQ1aOL5HSWBY71ERK5HzLSeO8T8fLU3FkLT6z+7CMZDdhbAQCuVRY4oxfPpBotCXnSfyfj1Ar0v+5FR0RWzmsvocGy684Jliu9gpRNxp4N0iveZSVKmxvO6T6J0yQ6F+ygIg==",
    "transactionId":"xxx",
    "timestamp":1704038400000
  }
}

更多关于HarmonyOS 鸿蒙Next中验证deviceToken的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,验证deviceToken通常涉及以下步骤:

  1. 获取deviceToken:通过PushManagergetToken方法获取deviceToken
  2. 服务器验证:将deviceToken发送到服务器,服务器通过华为推送服务API验证deviceToken的有效性。
  3. 本地验证:在本地使用PushManagerverifyToken方法验证deviceToken是否有效。

示例代码:

PushManager.getInstance().verifyToken(deviceToken, new VerifyTokenCallback() {
    @Override
    public void onResult(boolean isValid) {
        if (isValid) {
            // Token有效
        } else {
            // Token无效
        }
    }
});

确保在验证过程中处理网络异常和超时情况。

回到顶部