Google User Messaging Platform (UMP) SDK 是一款隐私权和消息工具,可帮助您管理隐私选项。如需了解详情,请参阅“隐私权和消息”页面简介。
创建消息类型
在您的 Ad Manager 账号的隐私权和消息标签页下,使用可用的用户消息类型之一创建用户消息。UMP SDK 会尝试显示根据您在项目中设置的 Ad Manager 应用 ID 创建的隐私权消息。
如需了解详情,请参阅隐私权和消息简介。
导入 SDK
CocoaPods(首选)
如要将该 SDK 导入 iOS 项目,最简单的方法就是使用 CocoaPods。请打开项目的 Podfile 并将下面这行代码添加到应用的目标中:
pod 'GoogleUserMessagingPlatform'
然后运行以下命令:
pod install --repo-update
如果您刚开始接触 CocoaPods,请参阅如何使用 CocoaPods,详细了解如何创建和使用 Podfile。
Swift Package Manager
UMP SDK 还支持 Swift Package Manager。请按照以下步骤导入 Swift 软件包。
在 Xcode 中,依次前往 File(文件)> Add Packages(添加软件包),安装 UMP SDK Swift 软件包。
在显示的提示中,搜索 UMP SDK Swift 软件包的 GitHub 代码库:
https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git
选择要使用的 UMP SDK Swift 软件包版本。对于新项目,我们建议使用 Up to Next Major Version。
然后,Xcode 会解析您的软件包依赖项,并在后台下载它们。如需详细了解如何添加软件包依赖项,请参阅 Apple 的文章。
手动下载
另一种方法是手动导入 SDK。
然后,将框架拖入您的 Xcode 项目中,确保已选中 Copy items if needed。
然后便可以将该框架包含在需要使用的任何文件中:
Swift
import UserMessagingPlatform
Objective-C
#include <UserMessagingPlatform/UserMessagingPlatform.h>
添加应用 ID
您可以在 Ad Manager 界面中找到您的应用 ID。
使用以下代码段将 ID 添加到 Info.plist
:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
征求用户意见
如需征求用户同意,请完成以下步骤:
- 请求获取最新的用户意见征求信息。
- 根据需要加载并显示用户意见征求表单。
请求提供意见征求信息
每次启动应用时,您都应使用
requestConsentInfoUpdate(with:completionHandler:)
请求更新用户的意见征求信息。此请求会检查以下内容:
- 是否需要征得用户同意。例如,首次需要征得用户同意,或之前的意见征求决定已过期。
- 是否需要隐私选项入口点。某些隐私权消息要求应用允许用户随时修改其隐私权选项。
根据需要加载和显示隐私权消息表单
收到最新的意见征求状态后,调用
loadAndPresentIfRequired(from:)
以加载收集用户意见征求所需的所有表单。加载后,表单会立即显示。
以下代码演示了如何请求用户的最新意见征求信息。如有需要,该代码会加载并显示隐私权消息表单:
Swift
// Requesting an update to consent information should be called on every app launch.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(with: parameters) {
requestConsentError in
guard requestConsentError == nil else {
return consentGatheringComplete(requestConsentError)
}
Task { @MainActor in
do {
try await UMPConsentForm.loadAndPresentIfRequired(from: viewController)
// Consent has been gathered.
consentGatheringComplete(nil)
} catch {
consentGatheringComplete(error)
}
}
}
Objective-C
// Requesting an update to consent information should be called on every app launch.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable requestConsentError) {
if (requestConsentError) {
consentGatheringComplete(requestConsentError);
} else {
[UMPConsentForm
loadAndPresentIfRequiredFromViewController:viewController
completionHandler:^(
NSError
*_Nullable loadAndPresentError) {
// Consent has been gathered.
consentGatheringComplete(
loadAndPresentError);
}];
}
}];
隐私设置选项
某些隐私权消息表单从发布商呈现的隐私权选项入口点呈现,让用户能够随时管理自己的隐私权选项。如需详细了解您的用户会在隐私权选项入口点看到哪条消息,请参阅可用的用户消息类型。
检查是否需要隐私选项入口点
调用
requestConsentInfoUpdate(with:completionHandler:)
后,请检查
UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus
,以确定您的应用是否需要隐私选项入口点:
Swift
var isPrivacyOptionsRequired: Bool {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus == .required
}
Objective-C
- (BOOL)isPrivacyOptionsRequired {
return UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus ==
UMPPrivacyOptionsRequirementStatusRequired;
}
向应用添加可见元素
如果需要隐私权入口点,请向应用添加一个可见且可交互的界面元素,用于显示隐私选项表单。如果不需要隐私权入口点,请将界面元素配置为不可见且不可互动。
Swift
self.privacySettingsButton.isEnabled =
GoogleMobileAdsConsentManager.shared.isPrivacyOptionsRequired
Objective-C
strongSelf.privacySettingsButton.enabled =
GoogleMobileAdsConsentManager.sharedInstance
.isPrivacyOptionsRequired;
显示隐私权选项表单
当用户与您的元素互动时,显示隐私选项表单:
Swift
try await UMPConsentForm.presentPrivacyOptionsForm(from: viewController)
Objective-C
[UMPConsentForm presentPrivacyOptionsFormFromViewController:viewController
completionHandler:completionHandler];
提出广告请求
在应用中请求展示广告之前,请检查您是否已使用
UMPConsentInformation.sharedInstance.canRequestAds
征得用户同意。在征求用户意见时,有两个地方可供检查:
- 在当前会话中征得用户同意后。
- 在调用
requestConsentInfoUpdate(with:completionHandler:)
后立即调用。系统可能已在上一会话中征得用户同意。延迟时间最佳实践:我们建议您不要等待回调完成,以便在应用启动后尽快开始加载广告。
如果在征求用户意见的过程中出现错误,您仍应检查自己是否可以请求广告。UMP SDK 会使用上一个会话的同意情况。
以下代码会检查您是否可以在征求用户意见的过程中请求展示广告:
Swift
GoogleMobileAdsConsentManager.shared.gatherConsent(from: self) { [weak self] consentError in
guard let self else { return }
if let consentError {
// Consent gathering failed.
print("Error: \(consentError.localizedDescription)")
}
if GoogleMobileAdsConsentManager.shared.canRequestAds {
self.startGoogleMobileAdsSDK()
}
// ...
}
// This sample attempts to load ads using consent obtained in the previous session.
if GoogleMobileAdsConsentManager.shared.canRequestAds {
startGoogleMobileAdsSDK()
}
Objective-C
[GoogleMobileAdsConsentManager.sharedInstance
gatherConsentFromConsentPresentationViewController:self
consentGatheringComplete:^(NSError *_Nullable consentError) {
if (consentError) {
// Consent gathering failed.
NSLog(@"Error: %@", consentError.localizedDescription);
}
__strong __typeof__(self) strongSelf = weakSelf;
if (!strongSelf) {
return;
}
if (GoogleMobileAdsConsentManager.sharedInstance.canRequestAds) {
[strongSelf startGoogleMobileAdsSDK];
}
// ...
}];
// This sample attempts to load ads using consent obtained in the previous session.
if (GoogleMobileAdsConsentManager.sharedInstance.canRequestAds) {
[self startGoogleMobileAdsSDK];
}
以下代码会在征得用户同意后设置 Google 移动广告 SDK:
Swift
private func startGoogleMobileAdsSDK() {
DispatchQueue.main.async {
guard !self.isMobileAdsStartCalled else { return }
self.isMobileAdsStartCalled = true
// Initialize the Google Mobile Ads SDK.
GADMobileAds.sharedInstance().start()
if self.isViewDidAppearCalled {
self.loadBannerAd()
}
}
}
Objective-C
- (void)startGoogleMobileAdsSDK {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Initialize the Google Mobile Ads SDK.
[GADMobileAds.sharedInstance startWithCompletionHandler:nil];
[self loadBannerAd];
});
}
测试
如果您希望在应用开发过程中测试集成,请按照以下步骤以编程方式注册您的测试设备。在发布应用之前,请务必移除设置这些测试设备 ID 的代码。
- 欢迎致电
requestConsentInfoUpdate(with:completionHandler:)
。 检查日志输出,以查找类似于以下示例的消息(向您显示您的设备 ID 以及如何将设备添加为测试设备):
<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
将测试设备 ID 复制到剪贴板。
修改代码,以便调用
UMPDebugSettings().testDeviceIdentifiers
并将其传入您的测试设备 ID 列表。Swift
let parameters = UMPRequestParameters() let debugSettings = UMPDebugSettings() debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"] parameters.debugSettings = debugSettings // Include the UMPRequestParameters in your consent request. UMPConsentInformation.sharedInstance.requestConsentInfoUpdate( with: parameters, completionHandler: { error in // ... })
Objective-C
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init]; UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ]; parameters.debugSettings = debugSettings; // Include the UMPRequestParameters in your consent request. [UMPConsentInformation.sharedInstance requestConsentInfoUpdateWithParameters:parameters completionHandler:^(NSError *_Nullable error){ // ... }];
强制调试地理位置
UMP SDK 提供了一种方法来使用
geography
测试应用行为,就像设备位于各个区域(例如欧洲经济区或英国)一样。请注意,调试设置仅适用于测试设备。
Swift
let parameters = UMPRequestParameters()
let debugSettings = UMPDebugSettings()
debugSettings.testDeviceIdentifiers = ["TEST-DEVICE-HASHED-ID"]
debugSettings.geography = .EEA
parameters.debugSettings = debugSettings
// Include the UMPRequestParameters in your consent request.
UMPConsentInformation.sharedInstance.requestConsentInfoUpdate(
with: parameters,
completionHandler: { error in
// ...
})
Objective-C
UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init];
UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init];
debugSettings.testDeviceIdentifiers = @[ @"TEST-DEVICE-HASHED-ID" ];
debugSettings.geography = UMPDebugGeographyEEA;
parameters.debugSettings = debugSettings;
// Include the UMPRequestParameters in your consent request.
[UMPConsentInformation.sharedInstance
requestConsentInfoUpdateWithParameters:parameters
completionHandler:^(NSError *_Nullable error){
// ...
}];
重置用户同意情况
通过 UMP SDK 测试应用时,您可能会发现重置 SDK 的状态很实用,因为您可以模拟用户的首次安装体验。该 SDK 提供的 reset
方法可实现此目的。
Swift
UMPConsentInformation.sharedInstance.reset()
Objective-C
[UMPConsentInformation.sharedInstance reset];
GitHub 上的示例
如需查看本页介绍的 UMP SDK 集成的完整示例,请参阅 Swift AdManagerBannerExample 和 Objective-C AdManagerBannerExample。