KivMob广告无法显示且Kivy抛出警告,求助排查方案
KivMob广告无法显示且抛出「Ads will not be shown」警告的解决方案
核心问题分析
从你的代码和运行日志来看,问题主要来自两个关键点:
- 平台支持限制:KivMob依赖Google Mobile Ads SDK,该SDK仅适配Android/iOS平台。你当前在Windows桌面环境运行,KivMob没有对应的桌面广告实现,因此直接抛出「Ads will not be shown」警告,这是桌面环境下的正常行为。
- 代码初始化逻辑问题:全局创建的KivMob实例未绑定到Kivy App的生命周期,可能导致广告组件初始化不完整。
解决方案步骤
1. 切换到移动平台测试
桌面环境无法加载真实或测试广告,必须在Android模拟器/真机、iOS模拟器/真机上运行测试。可以使用Buildozer打包Android应用,或通过对应工具打包iOS应用后测试。
2. 优化代码结构与初始化逻辑
将KivMob实例移到App类内部,绑定生命周期,并规范使用测试ID:
from kivmob import KivMob, TestIds from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label class AssistantApp(App): def build(self): self.layout = BoxLayout(orientation='vertical', spacing=10, padding=(10, 10, 10, 10)) self.computer_response_label = Label(text="Ready") self.layout.add_widget(self.computer_response_label) # 初始化KivMob,使用官方测试APP ID self.mob = KivMob(TestIds.APP) # 添加广告事件监听,排查加载问题 self.mob.set_banner_event_listener(self.on_banner_event) # 创建横幅广告,使用官方测试横幅ID,设置顶部显示 self.mob.new_banner(TestIds.BANNER, top_pos=True) # 请求并显示广告 self.mob.request_banner() self.mob.show_banner() return self.layout def on_banner_event(self, event): # 打印广告事件,便于定位加载失败原因 print(f"Banner Event: {event}") if __name__ == "__main__": AssistantApp().run()
3. 通过回调排查加载失败细节
添加on_banner_event回调后,可获取广告加载的具体事件,常见错误场景:
on_banner_failed_to_load:广告加载失败,错误码对应原因(如3为网络超时、2为ID无效)on_banner_loaded:广告加载成功on_banner_clicked:广告被点击
4. 配置Android平台必要权限
使用Buildozer打包时,需在buildozer.spec中添加权限:
android.permissions = INTERNET, ACCESS_NETWORK_STATE
关键注意事项
- 测试阶段必须使用KivMob提供的
TestIds,自定义广告ID在未通过Google Ads审核前无法加载广告。 - 桌面环境下的「Ads will not be shown」警告是预期行为,无需处理,仅在移动平台测试广告功能。
内容的提问来源于stack exchange,提问作者CuriousE
相关产品推荐
相关产品推荐

