uni-app ad-rewarded-video 组件 配置了 NSUserTrackingUsageDescription 在ios上 一进入该页面就闪退

uni-app ad-rewarded-video 组件 配置了 NSUserTrackingUsageDescription 在ios上 一进入该页面就闪退

操作步骤:

  • 点击跳转到 使用 ad-rewarded-video 的页面 ,立马闪退

预期结果:

  • 要求能正常使用

实际结果:

  • 会闪退

bug描述:

@close="onadclose" @error="onaderror"
{{error}}
观看广告
showAd() {
this.$refs.adRewardedVideo.show();
},

图片

![Image]([https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20251222/57191f5982e0c35d501d41bcbcd7de76.png](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20251222/57191f5982e0c35d501d41bcbcd7de76.png)

表格

项目
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 win10
HBuilderX 正式
HBuilderX版本 4.76
手机系统 iOS
手机版本 iOS 26
手机厂商 苹果
手机型号 iPhone14
页面类型 vue
Vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

更多关于uni-app ad-rewarded-video 组件 配置了 NSUserTrackingUsageDescription 在ios上 一进入该页面就闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

该bug反馈内容基本完整但存在关键缺失。标题和描述清晰指出了问题核心(ad-rewarded-video组件在iOS配置NSUserTrackingUsageDescription后闪退),提供了代码示例和复现步骤,但存在以下问题:

关键信息缺失:未说明NSUserTrackingUsageDescription的具体配置方式(如Info.plist中的键值对内容),也未提供崩溃日志,这对iOS闪退问题诊断至关重要。iOS系统版本标注为"iOS 26"明显错误(应为iOS 16+),影响问题定位。

代码示例不完整:虽然展示了组件基本用法,但缺少完整的页面结构和IDFA授权逻辑代码。根据知识库,iOS平台需严格遵循IDFA配置规范,若未正确实现ATTrackingManager授权请求会导致闪退。

版本问题:用户使用HBuilderX 4.76(较旧版本),而当前稳定版已更新至4.85+。知识库表明早期版本可能存在IDFA兼容性问题,建议升级后测试。

问题成立性:该现象符合iOS IDFA配置不当的典型表现。知识库明确指出:iOS 14+需在Info.plist添加NSUserTrackingUsageDescription并主动请求授权,否则广告SDK可能触发崩溃。用户未展示授权代码,极可能是未按规范实现。

建议用户:①确认iOS版本为16+ ②检查Info.plist配置及授权代码 ③升级HBuilderX至最新版 ④参考uni-ad iOS配置文档排查。若仍无法解决,需提供崩溃日志和完整配置代码。 内容为 AI 生成,仅供参考

更多关于uni-app ad-rewarded-video 组件 配置了 NSUserTrackingUsageDescription 在ios上 一进入该页面就闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


闪退问题需要在排查 ,你代码中ref=“adRewardedVideo” 这里可能也无法正常拉起 激励视频,ref 不能与组件同名

这样的代码 安卓是可以拉起 激励视频

根据你的描述,iOS 26(应该是 iOS 16)上一进入包含 ad-rewarded-video 组件的页面就闪退,这通常与 App Tracking Transparency(ATT) 框架的配置或使用方式有关。

核心问题分析

  1. NSUserTrackingUsageDescription 已配置:你已正确添加了隐私描述,但这只是第一步。从 iOS 14.5 开始,应用在请求 IDFA(广告标识符)之前,必须通过系统弹窗向用户申请跟踪权限。
  2. 闪退的直接原因ad-rewarded-video 组件(尤其是其背后的广告SDK,如腾讯优量汇或穿山甲)在初始化或尝试加载广告时,可能在没有先请求用户授权的情况下就尝试访问 IDFA。这违反了 Apple 的 ATT 政策,会导致应用被系统强制终止(闪退)。

解决方案

关键:在初始化或展示激励视频广告前,必须先请求 ATT 授权。

pages.json 或页面的 onLoad 生命周期中,使用 uni.getSystemSetting 检查跟踪权限状态,并根据需要调用 uni.requestTrackingAuthorization

推荐代码调整(在页面的 onLoadonShow 中):

onLoad() {
    // 先检查系统跟踪授权状态
    uni.getSystemSetting({
        success: (res) => {
            // res.appTrackingAuthorizationStatus 是授权状态
            // 0: not determined(未决定,需要请求)
            // 1: restricted(受限)
            // 2: denied(拒绝)
            // 3: authorized(授权)
            if (res.appTrackingAuthorizationStatus === 0) {
                // 状态为“未决定”,需要弹出系统授权弹窗
                uni.requestTrackingAuthorization({
                    success: (authRes) => {
                        // 用户做出选择后,无论同意或拒绝,都可以安全地初始化或加载广告了
                        console.log('ATT授权状态:', authRes);
                        // 这里可以开始加载广告或执行相关逻辑
                        // 例如:this.$refs.adRewardedVideo.load()
                    },
                    fail: (err) => {
                        console.error('请求ATT授权失败:', err);
                        // 即使失败,也通常可以继续(但可能无法获取IDFA,广告收益或个性化会受影响)
                    }
                });
            } else {
                // 用户已做出过选择(同意或拒绝),直接进行广告操作
                // 例如:this.$refs.adRewardedVideo.load()
            }
        },
        fail: (err) => {
            console.error('获取系统设置失败:', err);
            // 容错处理,可尝试直接加载广告(低版本iOS可能无此API)
        }
    });
}
回到顶部