<html></html>
上传到Google Play的aab包报警说没有 com.google.android.gms.permission.AD_ID 这个权限,但实际上在清单中已经添加,并且根据Google AdMob库的说明,只要依赖了 'com.google.android.gms:play-services-ads:20.4.0' 以上的版本,该权限会自动合并到主清单。我搞了一天不知道怎么解决这个问题,有没有遇到同样问题的朋友。
上传到Google Play的aab包报警说没有 com.google.android.gms.permission.AD_ID 这个权限,但实际上在清单中已经添加,并且根据Google AdMob库的说明,只要依赖了 'com.google.android.gms:play-services-ads:20.4.0' 以上的版本,该权限会自动合并到主清单。我搞了一天不知道怎么解决这个问题,有没有遇到同样问题的朋友。
引自免费微信小程序:皆我百晓生
为了解决Google Play报错 com.google.android.gms.permission.AD_ID
权限问题,我们需要检查以下几个步骤:
确保已添加 Google Ads SDK:
<uses-library>
标签,指定你想使用哪个 SDK,例如 <uses-library android:name="com.google.android.gms:admob:id" />
。build.gradle
文件(如果应用使用 Gradle 编译)中添加 dependencies
属性,并列出以下 Google Ads SDK 模块的依赖项:implementation 'com.google.android.gms:admob:20.4.0'
查看兼容性列表:
<uses-sdk>
和 <uses-permission>
标签,指出当前应用程序是否支持 Google Ads SDK 的某些功能:<uses-sdk version="28">
<!-- Other dependencies, such as LogCat or API Level -->
</uses-sdk>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Add other permission(s) if necessary for your use case -->
检查广告 ID 添加状态:
使用 Google Play 商店的广告审核工具(如 ad管理中心
或 Google Ad Manager Console
)检查你的 AAB (Application Bundle) 包的 AD ID 是否正确配置。这通常涉及到验证 AD ID 的格式、拼写以及是否已在应用列表中找到相应的 AD ID 项。
确保以下元素存在于 app_name.adb
文件中的权限节点(如 <application>
和 <service>
),其中包含以下内容:
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.BIND giovark.admob.AdMobService"/>
<uses-permission android:name="android.permission.BIND giovark.admob.DistributeManagerService"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_OCTET_STREAM"/>
<uses-permission android:name="android.permission.INTERNET"/>
<service
android:name=".AdMobService"
android:exported="false">
<intent-filter>
<action android:name="android.content.Intent.ACTION_DISTRIBUTE_AD[toast]" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.content.Intent.ACTION_RECEIVER_REGISTER"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<receiver
android:name=".BootReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.app.Intent.ACTION_BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
- 保存并关闭文件后,在 Google Ads SDK 安装目录下创建一个名为 `adb_test.sh` 的脚本,例如:
```bash
#!/bin/bash
AD_ID="your_ad_id"
adb shell am start -a android.intent.action.DISTRIBUTE_AD -c toast -d --data "https://example.com/data.json" -t "/path/to/your/test.apk" $AD_ID
Replace 'your_ad_id'
with the actual AD ID you want to distribute and "/path/to/your/test.apk"
with the path to your test APK file.
运行测试脚本:
adb_test.sh
脚本并执行相应的参数:./adb_test.sh
检查结果:
访问 Google Play 商店应用开发者页面查看已下载应用的状态。确保 AAB 包已成功上传至 Google Play 商店,并且在产品详情页中显示 AD ID 项已添加到广告单元列表。
如果发布成功,则应用应已成功在 Google Play 商店上线,用户可以通过搜索您的应用名、应用描述、广告信息等方式访问。
如果存在错误消息,可能涉及以下几种情况:
a. 广告 ID 已经正确添加但无法正常激活:可能是 AD ID 与应用其他部分冲突,比如服务、框架等组件,导致广告无法正常触发。此时需要排查每个可能造成冲突的组件,并修复冲突问题。
b. 广告 ID 已经正确添加但无法从 Google Play 下载:可能是因为 Android Studio 项目中的 build.gradle
文件或 .gradle/cargo
文件有问题,阻止了 AD ID 的获取。确认设置环境变量 export ADMOB_DEBUG
后,再重新编译和打包项目。
c. 客户端代码中误用了或未正确配置 Google Ads SDK,导致 AD ID 不匹配或不生效。检查代码中的相关配置,并确保与 Google Ads SDK 兼容性要求一致。
若上述步骤均无问题,那么您可能是以下原因导致的报错:
如果检测到 AD ID 正确添加,但手机仍无法在 Google Play 商店发现应用,可能是应用服务器的问题,或者是客户端缓存或网络问题。
如果检测到 AD ID 正确添加但无法下载,可能是客户端存在安全漏洞或 Google Play 商店服务器的防火墙设置阻止了下载。建议重新检查设备系统设置和信任谷歌服务,或者联系 Google Play 商店技术支持获取修复建议。
更新或重置 Google Ads SDK:
对于安卓系统,您可以尝试以下操作来更新或重置 Google Ads SDK:
a. 卸载 Android 上的 Google Ads SDK,并删除其 /manifest.xml
文件和对应的本地配置文件。
adb shell pm uninstall -r com.google.android.gms:admob:20.4.0
rm /path/to/admob-manifest.xml
rm /path/to/admob-config.xml
```
b. 将 `compile 'com.google.android.gms:admob:20.4.0'` 添加回 build.gradle 文件中,并将模块名称更改为与旧版本相同,但不包含 `20.4.0` 的名称:
```groovy
implementation 'com.google.android.gms:admob:3.7.1'
```
c. 更新所有依赖项至最新版本:
```
sync project
```
d. 如果更新过程中遇到任何问题,尝试卸载并重新安装 Google Ads SDK。在命令行中输入以下指令:
```sh
cd path/to/your/project
rm -rf admob.jar admob.jar.dSYM admob-service.jar admob-service.jar.dSYM admob-service.service.jar admob-mediastream.jar admob-mediastream.dSYM admob-play-services-ad-client.jar admob-play-services-ad-player.jar admob-play-services-ad-vungle.jar admob-play-services-ad-wallet.jar
zip -r admob-updates.zip android-sdk/maven/apache-client-versions/com/google/android/gms/admob/v11-3.7.1.jar
unzip admob-updates.zip
mv admob-api.jar admob-mediastream.jar admob-plugin.jar admob-service.jar admob-service.jar.dSYM admob-service.service.jar admob-mediastream.service.jar admob-play-services-ad-client.jar admob-play-services-ad-player.jar admob-play-services-ad-vungle.jar admob-play-services-ad-wallet.jar appcompat-v7.jar ...
```
重新启动或重启设备:
检查 Google Play 商店服务授权:
AndroidManifest.xml
文件中的 service
标签已启用 Google Play 商店服务,并且 Google 商店服务是服务中唯一的授权类,如下所示:<service
android:name=".AdMobService"
android:exported="false">
<intent-filter>
<action android:name="android.content.Intent.ACTION_DISTRIBUTE_AD[toast]" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
如果服务不是唯一授权类,确保应用下的其他 Service(如 CustomAdView 或 Vector Ads)并未从 Google Play 获取