应用追踪透明度的合规性

iOS 14 及更高版本要求发行商获得跨应用程序追踪用户设备的权限。此设备设置称为 App Tracking Transparency(应用追踪透明度),简称 ATT。Unity 建议实现自定义的权限流程。

发行商应在初始化任何旨在接收 IDFA 设置的 SDK 之前触发 ATT 权限请求。

重要:Apple 要求每次安装仅触发一次此请求,但用户可以随时在 iOS Settings(设置)菜单中编辑他们的偏好设置。

以下是用于显示 ATT 权限请求的通用用户流程:

  1. (推荐)配置一个 ATT 内容相关屏幕,在其中说明接受广告商追踪的价值。

  2. 为请求授权时显示的系统权限警报信息配置用户追踪描述。如果希望申请用户追踪权限,则需要此步骤。

  3. 在您的项目中实现权限流程。

    • 检查设备的授权状态。
    • 如果设备的授权状态未知,则向终端用户显示 ATT 内容相关屏幕和权限请求。

显示 ATT 内容相关屏幕

定向投放广告比内容相关广告提供更高的回报率。根据 Apple 的政策,只能在每次安装应用时提示一次用户是否接受定向投放广告。因此,Unity 建议实现一个内容相关屏幕来说明接受定向投放广告的好处。

Unity 的 iOS 14 支持包中包括一个内容相关屏幕场景的示例,以及一个完全可自定义的内容相关屏幕预制资源。具体文本仅作为示例参考。如果是在公开应用程序中使用,须遵守与您提交的其余部分相同的认证准则。由于这是一个提示接受定向投放广告的机会,Unity 建议自定义包含的消息和图像。

重要:必须使用 iOS 14 支持包 0.3.0 或更高版本以及 Unity 2018.4.33f1 或更高版本才能使用本节中所述的资源。

在 Unity 2019.1 或更高版本中使用该资源

更高版本的 Unity 编辑器支持从 Package Manager(包管理器)窗口导入示例。

  1. 在 Unity 编辑器中,选择 Window(窗口)> **Package Manager(包管理器)**以打开 Package Manager(包管理器)窗口。
  2. 在 Package Manager(包管理器)窗口中,选择 **iOS 14 Support Advertising Support(iOS 14 支持广告支持)**包。
  3. 在包描述底部的示例部分中找到 01 Context Screen(01 内容相关屏幕),然后选择 Import Into Project(导入到项目中)
  4. 在 Project(项目)窗口中,选择 Assets(资源)> Samples(示例)> iOS 14 Advertising Support(iOS 14 广告支持)> 01 Context Screen Scenes(01 内容相关屏幕场景)> **Context Screen Sample(内容相关屏幕示例)**以打开 Context Screen Sample(内容相关屏幕示例)场景。

导入示例场景后,您可以复制和修改该场景,或复制预制件以用于现有场景之一。

在 Unity 2019.0 或更低版本中使用该资源

旧版本的 Unity 将要求您将示例作为单独的 Unity 项目打开。

  1. Unity Hub 中的 **Projects(项目)**下,选择 ADD(添加)
  2. 导航到您从包代码仓库下载的 com.unity.ads.ios-support 文件夹,然后选择 SampleProject~ 并选择 Select Folder(选择文件夹)
  3. 选择要用于示例项目的 Unity 版本并将其打开。
  4. 在 Unity 编辑器的 Project(项目)窗口中,选择 Assets(资源)> Samples(示例)> iOS 14 Advertising Support(iOS 14 广告支持)> 01 Context Screen(01 内容相关屏幕)> **Context Screen Sample(内容相关屏幕示例)**以打开 Context Screen Sample(内容相关屏幕示例)场景。

要将资源整合到您的项目中,请执行以下操作:

  1. 在示例项目目录中,复制 Assets/Samples/iOS 14 Advertising Support/01 - Context Screen 文件夹。
  2. 根据您偏好的组织结构,将复制的文件夹粘贴到活动项目的目录中。
  3. 打开您的活动项目,并确认已复制 01 - Context Screen 资源。
  4. 打开 **Context Screen Sample(内容相关屏幕示例)**场景并进入运行模式以确认预期行为。

预期行为

场景将显示为空。在进入运行模式时将显示内容相关屏幕。在内容相关屏幕上选择 **Next(下一步)**时,不会发生任何变化,因为本机 ATT 请求仅在 iOS 设备上发生。

ContextScreenManager 脚本 (Assets/Samples/iOS 14 Advertising Support/01 - Context Screen/Scripts/ContextScreenManager) 可确保内容相关屏幕出现在场景开始时,以及用户之前没有收到 ATT 权限请求时。

重要:您可以使用自己的信息、外观和风格来实现自定义的内容相关屏幕。如果是使用自定义的内容相关屏幕预制件,请确保将其分配给 Inspector(检视面板)中 ContextScreenManager 脚本的 contextScreenPrefab 字段。

当用户通过调用 SDK 的 RequestAuthorizationTracking API 取消内容相关屏幕时,ContextScreenView 脚本 (Assets/Samples/iOS 14 Advertising Support/01 - Context Screen/Scripts/ContentScreenView) 会触发 Apple 的 ATT 权限请求。

显示 ATT 权限请求

为了遵守 Apple 的 ATT 准则,您必须为请求对话框提供相应描述,然后在您的应用程序中实现权限请求。

重要:在您的游戏中投放广告之前,您必须实现权限请求。

配置用户追踪描述

Apple 要求提供 ATT 权限请求的描述。您可以使用 Info.plist 文件中的 NSUserTrackingUsageDescription 键设置描述。要提供一条消息告知用户您为何申请使用设备追踪数据的权限,请执行以下操作:

  1. 在您的 Xcode 项目导航器中,打开 Info.plist 文件。

  2. 单击属性列表编辑器中任意键旁边的添加按钮 (+) 以创建新的属性键。

  3. 输入键名称 NSUserTrackingUsageDescription

  4. 选择字符串值类型。

  5. 在值字段中输入应用追踪透明度消息。例如:

    • “We will use your data to provide a better and personalized ad experience.(我们将使用您的数据来提供更好的个性化广告体验。)”
    • “We try to show ads for apps and products that will be most interesting to you based on the apps you use, the device you are on, and the country you are in.(我们会尝试根据您使用的应用、您使用的设备以及您所在的国家/地区,为您最感兴趣的应用和产品展示广告。)”
    • “We try to show ads for apps and products that will be most interesting to you based on the apps you use.(我们会尝试根据您使用的应用,为您最感兴趣的应用和产品展示广告。)”

重要:Apple 提供了具体的应用商店准则,为所有面向终端用户的隐私相关功能定义了可接受的使用条件和消息规则。Unity 不提供法律意见。因此,此页面上的信息不能替代寻求您自己的法律顾问来确定业务和流程的法律要求以及如何满足这些要求。

Unity 开发者可以选择创建一个构建后步骤,自动将用户追踪描述添加到文件中,而不是在每次生成构建版本时手动进行配置:

using UnityEditor;
using UnityEditor.Callbacks;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif
using System.IO;
 
public class PostBuildStep {
    // Set the IDFA request description:
    const string k_TrackingDescription = "Your data will be used to provide you a better and personalized ad experience.";
 
    [PostProcessBuild(0)]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToXcode) {
        if (buildTarget == BuildTarget.iOS) {
            AddPListValues(pathToXcode);
        }
    }
 
    // Implement a function to read and write values to the plist file:
    static void AddPListValues(string pathToXcode) {
        // Retrieve the plist file from the Xcode project directory:
        string plistPath = pathToXcode + "/Info.plist";
        PlistDocument plistObj = new PlistDocument();
 
 
        // Read the values from the plist file:
        plistObj.ReadFromString(File.ReadAllText(plistPath));
 
        // Set values from the root object:
        PlistElementDict plistRoot = plistObj.root;
 
        // Set the description key-value in the plist:
        plistRoot.SetString("NSUserTrackingUsageDescription", k_TrackingDescription);
 
        // Save changes to the plist:
        File.WriteAllText(plistPath, plistObj.WriteToString());
    }
}

在 Unity 中实现 ATT 权限请求

iOS 14 支持包提供对 Apple API 的访问权限,因此可检查设备的权限状态并在状态未确定时显示请求。

以下脚本展示了使用 UNITY_IOS 预编译定义的简单权限请求实现方案,确保代码仅在 iOS 设备上运行时才会执行:

using UnityEngine;
#if UNITY_IOS
// Include the IosSupport namespace if running on iOS:
using Unity.Advertisement.IosSupport;
#endif
 
public class AttPermissionRequest : MonoBehaviour {
    void Awake() {
#if UNITY_IOS
        // Check the user's consent status.
        // If the status is undetermined, display the request request:
        if(ATTrackingStatusBinding.GetAuthorizationTrackingStatus() == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED) {
            ATTrackingStatusBinding.RequestAuthorizationTracking();
        }
#endif
    }
}

在 Xcode 中实现 ATT 权限请求

注意:请参阅 Apple 开发者文档,了解更多权限请求实现信息。

以下示例脚本展示了一个简单的权限请求实现:

#import <AppTrackingTransparency/AppTrackingTransparency.h>
 
- (void)requestTrackingAuthorization {
    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
        // Tracking authorization completed. Start loading ads here.
    }];
}

测试您的权限请求

要测试您的实现,请以 iOS 为目标平台构建您的项目,然后在 Xcode 中将其打开。如果打开 Info.plist 文件(默认情况下,它位于应用程序捆绑包的根文件夹中),应该会看到您在构建后步骤中添加的 NSUserTrackingUsageDescription 描述。

接下来,在测试设备上构建并启动应用。首次启动项目时应显示 ATT 权限请求。

注意:根据 Apple 的要求,如果您关闭请求并再次启动应用,则不会再触发请求。如果您想再次测试该实现,需要卸载并重新安装应用。

其他资源