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生成和请求发送过程进行分析。
- deviceToken生成过程:
- 检查是否已打开“应用设备状态检测”开关并申请调试Profile。
- 检查生成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
通常涉及以下步骤:
- 获取
deviceToken
:通过PushManager
的getToken
方法获取deviceToken
。 - 服务器验证:将
deviceToken
发送到服务器,服务器通过华为推送服务API验证deviceToken
的有效性。 - 本地验证:在本地使用
PushManager
的verifyToken
方法验证deviceToken
是否有效。
示例代码:
PushManager.getInstance().verifyToken(deviceToken, new VerifyTokenCallback() {
@Override
public void onResult(boolean isValid) {
if (isValid) {
// Token有效
} else {
// Token无效
}
}
});
确保在验证过程中处理网络异常和超时情况。