操作请求:声明您的广告ID权限

130

今天我收到了这封电子邮件:

去年七月,我们宣布了广告政策的更改以增强安全和隐私。我们对面向儿童的应用程序使用的标识符添加了新的限制。当用户选择删除他们的广告ID以退出个性化广告时,如果开发人员试图访问该标识符,他们将收到一串零而不是标识符。该行为将从2022年4月1日开始扩展到手机、平板电脑和Android TV。我们还宣布,当您更新应用程序以针对API级别31(Android 12)进行目标设置时,您需要声明AD_ID权限。今天,我们分享了开发人员有更多时间缓解过渡的消息。我们要求您在应用程序能够以Android 13为目标时而不是从Android 12开始时声明此权限。

操作事项:如果您使用广告ID,则必须在应用程序的目标为Android 13或更高版本时声明AD_ID权限。未声明权限的应用程序将收到一串零。注意:您将能够在今年晚些时候面向Android 13。如果您的应用程序使用已声明Ad ID权限的SDK,它将通过清单合并获取权限声明。如果您的应用程序的目标受众包括儿童,则不得从儿童或未知年龄用户传输Android广告ID(AAID)。

我的应用程序没有使用广告标识符(Advertising ID)。我是否需要在 Manifest 中声明 AD_ID 权限?
12个回答

157

情况一:应用程序不包含任何广告:

您可以通过在AndroidManifest.xml文件中添加tools:node="remove"来轻松删除/忽略它。

<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>

确保在 AndroidManifest.xml 文件的顶部有 xmlns:tools

即使另一个第三方库要求此特定权限,构建也将被强制不合并到最终的清单文件中。 你可以从这个SO答案中获取更多信息。


情况2:应用包含广告:

</manifest> 之前,在 AndroidManifest.xml 中添加以下内容:

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

你可以从这里获取更多信息。


9
对我没有用 :( - Tanvir Ahmed
3
@TanvirAhmed 您可以在合并的清单文件app/build/intermediates/manifests/full/debug/AndroidManifest.xml中找到您的最终权限。 - Rumit Patel
2
我正在使用Flutter构建应用程序。但是这个解决方案对我不起作用。 - L.Goyal
1
我也遇到了同样的问题,它无法正常工作。 - Christian
4
如果有人想知道xmlns:tool是什么意思,那么需要这样写:xmlns:tools="http://schemas.android.com/tools" - Genix
显示剩余6条评论

79

情况一:您的应用有广告

</manifest>之前,将以下内容添加到AndroidManifest.xml中:

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

情况二:您的应用程序没有广告

确保在<manifest ...>上方的AndroidManifest.xml中有xmlns:tools。 (感谢此答案)例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.mycompany.myapp">

接下来,在页面底部,在</manifest>标签之前添加以下内容:

    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>

来源:


5
无法正常工作 :'( 我仍然收到有关 com.google.android.gms.permission.AD_ID 的警告。 - Chloé
您的源代码给我返回了“服务不可用”的错误。 - Greg T
2
添加xmlns:tools="http://schemas.android.com/tools"是很重要的。没有它,我的应用程序将无法编译。谢谢! - Isuru
1
如果您在移除应用程序的权限时仍然遇到问题:我不得不在manifestapplication中都声明remove标签,以使所有出现的情况消失。是的,我在AndroidManifest.xml中重复了同一行代码。 - Malte Peters
对我来说,它不起作用! - undefined

42

3
我的应用程序没有广告,但我需要添加吗? - Ysp
@Ysp,如果你的应用程序不含广告,则你不必这样做。 - Umeshkumar D.
@gurkanstack,您应该升级AdMob版本到最新版本,以避免手动设置。 - ABDERRAHMANE OUALI
Google的“快速入门”中有这样一行:“(可选)声明AD_ID权限以使之前的版本与Android 13兼容。” 只需打开它以更新旧版Admob的清单即可。谢谢朋友。 - Phuc
@Ysp,如果你的应用程序不包含广告,可以查看这个答案 - Rumit Patel
显示剩余6条评论

41

在我的情况下,我只使用Firebase Analytics来进行崩溃报告等。

您可以设置应用程序使用广告ID。

enter image description here

然后只使用分析功能。

enter image description here


如何访问这个页面?你能分享一下吗? - LOG_TAG
实际上,您应该收到一封带有链接的电子邮件。 - Cyber
5
对我有用,谢谢。+1 应用内容 --> 广告标识符 --> 是 --> 分析 当应用程序目标SDK为33时出现问题。 - InsaneCat
这对我来说很重要...我正在从谷歌那里完成目标SDK 33(Android 13)的要求。当我上传到谷歌Play控制台时,突然出现了一个错误,要求我在AndroidManifest中声明AD_ID权限,但我甚至没有在我的应用程序中使用它...在这里找到解决方案后,可能是Firebase Analytics引起的问题... - undefined
这听起来是个不错的解决方案。但它会对用户产生什么影响?对用户有什么改变? - undefined

27

1
那我们需要更新所有的应用程序来添加这个权限吗?如果我们不更新应用程序会发生什么? - joan16v
我可以使用AD_ID变量吗?例如这样 <uses-permission android:name="com.google.android.gms.permission.@string/admob_appId"/>?谢谢。 - spcsLrg
@spcsLrg,不需要逗号,只需添加<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>。 - Suhad Bin Zubair
1
@joan16v,如果您的构建目标 API 是 31,则这是 Google 的要求。请在此处查看 https://developers.google.com/interactive-media-ads/docs/sdks/android/dai/android-12 。如果您的目标 API 仍然 <= 30,则无需进行任何操作。 - Phuc

27

如果您的应用程序不包含广告,请确保在Play Console的App content页面(策略>应用内容)上完成调查。

只需选择选项:否,我的应用程序不包含广告

如果您不这样做,您将无法上传新版本的应用程序到Google Play。

Google Play Console Ad Selector Location


17

首先,
com.google.android.gms.permission.AD_ID 可以被其他第三方 SDK 添加,例如:

  • Play Services-ads
  • firebase-analytics

所以,如果您没有手动添加 permission.AD_ID,请确保它没有被任何其他 SDK 添加到 merged manifest 文件中。

merged-manifest 路径:
project > app > build > intermediate > merged_manifest > release > AndroidManifest.xml

现在进入您的 play console > app content > Adverstising ID 并且

  • 如果您的合并清单不包含 AD_ID,请选择 NO,否则
  • 选择 YES 并完成下一个选项。

10

不用担心。使用 AdMob 广告的所有开发人员都收到了这个警告。只要确保在您的build.gradle文件中使用了最新的 Google 移动广告 SDK(Admob)或 AdMob SDK 版本高于或等于 20.4.0。在这种情况下,SDK 会自动处理它

否则,对于旧版本低于 20.4.0 的 SDK,我们需要在 AndroidManifest.xml 文件中手动添加以下行。

<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

8

有两种不同的形式:

  1. 广告
  2. 广告标识符(Advertising ID)

最初我会感到困惑,因为我没有注意到后者,所以你的应用可以采用任何组合方式,例如无广告但是启用了广告标识符。

在这份文档中,解释了Google服务可能出于非广告目的而包含广告标识符,比如用于分析。

Google Play服务4.0版本引入了新的API和一个供广告和分析提供商使用的ID。以下是使用此ID的条款。

在这份文档的示例部分中,很明确地说明了广告是指通常理解的广告形式:横幅广告、弹出式窗口、列表中间的磁贴等等。

分析合并清单后,我们可以看到库 play-services-measurement-api 正在添加权限,并与分析相关。该库清单如下:

    <uses-permission android:name="com.google.android.gms.permission.AD_ID" />

    <application>
        <service
            android:name="com.google.firebase.components.ComponentDiscoveryService"
            android:exported="false" >
            <meta-data
                android:name="com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar"
                android:value="com.google.firebase.components.ComponentRegistrar" />
        </service>
    </application>

请注意,库正在注册analytics.connector.internal.AnalyticsConnectorRegistrar
在这种情况下,广告表单必须标记为“否”,而广告ID表单必须标记为“是”,然后再标记分析选项。
我看到有人建议强制清单不合并permission.AD_ID,但那会破坏分析功能。

2
这实际上是正确的答案——广告和广告标识之间的区别。谢谢这个提示——解决了我的问题。 - 5ulo
2
这很令人困惑,为什么广告 ID 默认会包含在分析中?对我来说似乎是一个错误的名称,如果不阅读多个文档,很难弄清楚。@5ulo - cutiko

4

当您设置 targetSdkVersion 33 时,您必须在清单文件中添加以下行

<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>

如果未设置此项,在您的应用程序处于生产状态时,Play Console 上会显示警告信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接