uniapp中App包含NSUserTrackingUsageDescription时如何请求用户追踪权限

在uniapp开发的iOS应用中,已经按照要求添加了NSUserTrackingUsageDescription描述字段,但不知道如何具体触发用户追踪权限的弹窗请求。请问应该调用哪个API或方法?是否需要引入额外的插件?

2 回复

在uniapp中,需先在manifest.json的App模块权限配置中勾选NSUserTrackingUsageDescription并填写描述。然后在需要时调用plus.ios.requestTrackingAuthorization()来请求用户追踪权限。


在 UniApp 中,当 App 包含 NSUserTrackingUsageDescription(用于 iOS 14+ 的用户追踪权限请求)时,需要通过原生插件或条件编译调用 iOS 原生 API 来请求权限。以下是步骤和示例代码:

步骤:

  1. 在 manifest.json 中配置隐私描述: 在 App模块配置iOS设置 下,添加 NSUserTrackingUsageDescription 字段,填写描述文本(例如:“请求允许追踪以提供个性化广告”)。

  2. 通过 UniApp 插件或条件编译调用原生代码

    • 使用条件编译(如 #ifdef APP-PLUS)区分平台。
    • 通过 plus.ios 接口调用 iOS 的 ATTrackingManager API。

示例代码(在 Vue 页面或 JS 文件中):

// 检查是否为 iOS 平台
#ifdef APP-PLUS
if (plus.os.name === 'iOS') {
  // 导入 iOS 原生框架
  const ATTrackingManager = plus.ios.import('AppTrackingTransparency').ATTrackingManager;
  
  // 检查当前权限状态
  const status = ATTrackingManager.trackingAuthorizationStatus;
  
  // 如果未决定,请求权限
  if (status === 0) { // 0 表示 ATTrackingManagerAuthorizationStatusNotDetermined
    ATTrackingManager.requestTrackingAuthorizationWithCompletionHandler(function(result) {
      // 回调处理结果
      console.log('追踪权限状态:', result);
      plus.ios.deleteObject(ATTrackingManager); // 释放对象
    });
  } else {
    console.log('当前权限状态:', status);
  }
}
#endif

注意事项:

  • iOS 版本要求:仅 iOS 14 及以上版本支持此权限弹窗。
  • 描述文本:必须清晰说明追踪用途,否则可能被 App Store 审核拒绝。
  • 权限状态:结果代码为整数(0-未决定,1-受限,2-拒绝,3-授权)。

通过以上方法,即可在 UniApp 中请求用户追踪权限。

回到顶部