用户2979025
用户2979025
  • 发布:2026-02-06 16:56
  • 更新:2026-02-06 16:57
  • 阅读:90

【报Bug】[iOS崩溃] 官方hello-uniapp示例中ad组件使用测试adpid导致DCUniAdRequest崩溃

分类:uni小程序sdk

产品分类: uni小程序SDK

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: iphone 12

页面类型: vue

SDK版本号: 4.75

示例代码:

https://github.com/dcloudio/hello-uniapp
<template>
<view>
<page-head :title="title"></page-head>
<view class="ad-view">
<!-- #ifdef MP-WEIXIN -->
<ad :unit-id="unitId" type="feed" @load="adload" @error="aderror"/>
<!-- #endif -->
<!-- #ifdef APP-PLUS -->
<ad adpid="1111111111" @load="adload" @error="aderror"/>
<!-- #endif -->
<!-- #ifdef APP-PLUS -->
<view class="ad-tips" v-if="!isLoad">
<text>{{adMessage}}</text>
</view>
<!-- #endif -->
<!-- #ifndef APP-PLUS -->
<view class="ad-tips">
<text>小程序端的广告ID由小程序平台提供</text>
</view>
<!-- #endif -->
</view>
<view class="tips">
<text class="tips-text">本示例页面仅演示ad组件。另点此可体验</text><text class="tips-hl" @click="gotoapi">激励视频API</text><text class="tips-text">。</text>
</view>
</view>
</template>

<script>
export default {
data() {
return {
title: 'AD组件',
unitId: '',
isLoad: false,
adMessage: "广告加载中..."
}
},
onLoad() {
// #ifdef MP-WEIXIN
this.unitId = '';
// #endif
// #ifdef MP-TOUTIAO
this.unitId = ''
// #endif
// #ifdef MP-QQ
this.unitId = ''
// #endif
},
methods: {
adload() {
this.isLoad = true;
},
aderror(e) {
this.adMessage = e.detail.errMsg;
},
gotoapi() {
uni.navigateTo({
url: "/pages/API/rewarded-video-ad/rewarded-video-ad"
})
}
}
}
</script>

<style>
.content {
background-color: #DBDBDB;
padding: 10px;
}

.ad-view {  
    background-color: #FFFFFF;  
    margin-bottom: 10px;  
}  

.ad-tips {  
    color: #999;  
    padding: 30px 0;  
    text-align: center;  
}  

.tips {  
    margin-top: 30px;  
    text-align: center;  
    line-height: 42px;  
}  

.tips-text {  
    color: #444;  
}  

.tips-hl {  
    color: #007AFF;  
    margin-left: 1px;  
}  

</style>

操作步骤:

多次点击 : AD 组件

预期结果:

app 不要崩溃,容错处理

实际结果:

app 会崩溃

bug描述:

问题描述:运行官方hello-uniapp示例中的广告组件页面,在iOS自定义基座下崩溃。
崩溃关键日志:提供您之前获取的包含 *** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: vb) 和 +[DCUniAdRequest setCommonQuery:] 的完整堆栈。

2026-02-06 16:56 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

作为 DCloud 官方人员,我对这条 bug 反馈进行如下评审:


✅ 反馈完整性评审

  • BUG 标题:清晰,明确指出了“iOS崩溃”、“DCUniAdRequest崩溃”等关键信息。
  • BUG 描述:基本清晰,提到了崩溃日志的关键错误信息 -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: vb),但未提供完整堆栈,建议补充。
  • 代码示例:提供了 hello-uniapp 官方示例中的完整页面代码,可直接运行,符合要求。
  • 复现步骤:描述为“多次点击 AD 组件”,略显模糊,建议补充具体操作路径,例如“进入页面后点击广告组件区域”。
  • 预期结果:合理,要求“app 不要崩溃,容错处理”。
  • 实际结果:明确,指出“app 会崩溃”。
  • 分类信息:完整,包含平台、系统版本、设备型号等。

结论:反馈内容基本完整,具备复现条件,但建议补充完整崩溃堆栈和更清晰的复现路径。


✅ Bug 是否成立

根据知识库中关于 <ad> 组件的说明:

  • 测试广告位 adpid="1111111111" 是官方提供的测试位,仅适用于 HBuilderX 标准基座,在自定义基座或云打包中不会生效,可能导致 SDK 内部逻辑异常。
  • 当前反馈中提到使用的是iOS自定义基座,而测试位 1111111111 在自定义基座中不会返回有效广告数据,可能触发 SDK 内部空值处理逻辑,导致崩溃。

结论:该 bug 成立,属于 SDK 在测试位无效时未做 nil 值保护的问题。


✅ 是否为基本概念问题

  • 用户使用的是官方示例代码,未涉及平台误用或条件编译错误。
  • 问题核心在于测试广告位在自定义基座中无效,而 SDK 未做容错处理,不属于用户误用

✅ 官方建议回复(基于知识库)

您好,感谢您的反馈。

经评审,该问题属实。您当前使用的是测试广告位 adpid="1111111111",该广告位仅在 HBuilderX 标准基座中有效,在自定义基座或云打包中不会返回广告数据,可能导致 SDK 内部空值崩溃。

临时解决方案:

  • 若使用自定义基座,请前往 uni-ad 后台 申请正式广告位,并替换 adpid
  • 若仅用于测试,请使用标准基座运行

后续优化:

我们将在后续版本中优化 SDK 的容错处理,避免因测试位无效导致崩溃。

如您已使用正式广告位仍出现崩溃,请补充完整崩溃堆栈与复现路径,我们将进一步跟进。


如需进一步协助,欢迎加入 uni-ad 官方交流群

内容为 AI 生成,仅供参考
用户2979025

用户2979025 (作者)

崩溃堆栈信息

要回复问题请先登录注册