HarmonyOS鸿蒙Next中tokenID获取

HarmonyOS鸿蒙Next中tokenID获取 tokenID怎么获取啊,我这边想接入日程,但是一直有问题

private async checkCalendarPermission(): Promise<void> {
  try { 
    const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; 
    const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 
    const tokenId: number = context.tokenId; //添加明确的类型声明 
    const readStatus: abilityAccessCtrl.GrantStatus = await atManager.verifyAccessToken( tokenId, 'ohos.permission.READ_CALENDAR' ); 
    const writeStatus: abilityAccessCtrl.GrantStatus = await atManager.verifyAccessToken( tokenId, 'ohos.permission.WRITE_CALENDAR' ); 
    this.hasCalendarPermission = ( readStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED && writeStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED ); 
    this.calendarPermissionStatus = this.hasCalendarPermission ? '已授权' : '未授权'; 
  } catch (error) { 
    const err: BusinessError = error as BusinessError; 
    console.error('检查日历权限失败', err.message); 
    this.calendarPermissionStatus = '检查失败'; 
  } 
}

我是这么写的


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

3 回复

verifyAccessToken的API中的tokenId,表示要校验的目标应用的身份标识,可通过应用的ApplicationInfo的accessTokenId字段获得。具体可参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-abilityaccessctrl#verifyaccesstoken9

可参考代码:

import { bundleManager } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
try {
  bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {
    let tokenId = data.appInfo.accessTokenId;
    console.info('testTag123:' + data.appInfo.accessTokenId);
    hilog.info(0x0000, 'testTag', 'getBundleInfoForSelf successfully. Data: %{public}s', JSON.stringify(data));
  }).catch((err: BusinessError) => {
    hilog.error(0x0000, 'testTag', 'getBundleInfoForSelf failed. Cause: %{public}s', err.message);
  });
} catch (err) {
  let message = (err as BusinessError).message;
  hilog.error(0x0000, 'testTag', 'getBundleInfoForSelf failed: %{public}s', message);
}

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


在HarmonyOS Next中,tokenID通过@ohos.bundle.bundleManager模块的getBundleInfoForSelf方法获取。调用该方法可返回当前应用的BundleInfo对象,其中包含应用的tokenID信息。具体属性为BundleInfo对象的accessTokenId字段,类型为number。此ID用于应用权限校验和身份识别。

在HarmonyOS Next中获取tokenID的方式是正确的,通过context.tokenId可以获取当前UIAbility的token标识符。从代码来看,权限验证逻辑也没有问题,建议检查以下两点:

  1. 确保在config.json中声明了需要的日历权限:
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.READ_CALENDAR"
      },
      {
        "name": "ohos.permission.WRITE_CALENDAR"
      }
    ]
  }
}
  1. 确认getContext()方法能正确获取到UIAbilityContext,如果是在Page中调用,可能需要通过其他方式获取context。

如果仍然有问题,可以查看控制台输出的具体错误信息来进一步排查。

回到顶部