根據 Google《歐盟地區使用者同意授權政策》規定,您必須向歐洲經濟區 (EEA) 和英國境內的使用者揭露特定資訊,且必須依法取得使用者同意,才能使用 Cookie 或其他本機儲存空間,以及使用個人資料 (例如廣告 ID) 放送廣告。本政策是配合《歐盟地區電子通訊隱私指令》和《一般資料保護規則》(GDPR) 而製定。
為了協助發布商根據這項政策履行自身職責,Google 提供了 User Messaging Platform (UMP) SDK。UMP SDK 已更新,現已支援最新的 IAB 標準。這些設定現在全都可在隱私權與訊息中 AdMob 輕鬆處理。
先備知識
- 完整閱讀入門指南
- 如果您正在處理 GDPR 相關規定,請參閱IAB 規定對歐盟地區同意授權訊息的影響
建立訊息類型
使用其中一種 可用的使用者訊息類型 在 AdMob 帳戶的「隱私權與訊息」分頁中建立 AdMob 帳戶。UMP SDK 會嘗試顯示從專案中設定的 AdMob 應用程式 ID 建立的使用者訊息。如果未設定應用程式訊息,SDK 會傳回錯誤。
詳情請參閱「關於隱私權與訊息」。
新增應用程式 ID
您可以在 AdMob UI 中找到應用程式 ID。 將 ID 加進 使用以下程式碼片段:
要求同意聲明資訊
您應在每次應用程式啟動時,使用 Update()
要求更新使用者的同意聲明資訊。這會決定使用者是否必須在尚未同意或同意聲明已過期的情況下提供同意聲明。
以下範例說明如何在應用程式啟動時查看狀態:
void Start()
{
// Create a ConsentRequestParameters object.
ConsentRequestParameters request = new ConsentRequestParameters();
// Check the current consent information status.
ConsentInformation.Update(request, OnConsentInfoUpdated);
}
void OnConsentInfoUpdated(FormError consentError)
{
if (consentError != null)
{
// Handle the error.
UnityEngine.Debug.LogError(consentError);
return;
}
// If the error is null, the consent information state was updated.
// You are now ready to check if a form is available.
}
視需要載入並顯示同意聲明表單
收到最新的同意聲明狀態後,請對ConsentForm
類別呼叫LoadAndShowConsentFormIfRequired()
以載入同意聲明表單。如果需要同意聲明狀態,SDK 會載入表單,並立即透過顯示表單。關閉表單後,系統會 Action<FormError>
callback
此作業 。如果不需要徵求同意,系統會立即 Action<FormError>
callback
。
void Start()
{
// Create a ConsentRequestParameters object.
ConsentRequestParameters request = new ConsentRequestParameters();
// Check the current consent information status.
ConsentInformation.Update(request, OnConsentInfoUpdated);
}
void OnConsentInfoUpdated(FormError consentError)
{
if (consentError != null)
{
// Handle the error.
UnityEngine.Debug.LogError(consentError);
return;
}
// If the error is null, the consent information state was updated.
// You are now ready to check if a form is available.
ConsentForm.LoadAndShowConsentFormIfRequired((FormError formError) =>
{
if (formError != null)
{
// Consent gathering failed.
UnityEngine.Debug.LogError(consentError);
return;
}
// Consent has been gathered.
});
}
如果您需要在使用者做出選擇或關閉表單後執行任何動作,請將該邏輯放入表單的 Action<FormError>
callback中。
請求廣告
在應用程式中請求廣告前,請確認您已使用 CanRequestAds()
取得使用者的同意聲明。收集同意聲明時,需要檢查兩個地方:
- 從目前的工作階段中收集到同意聲明後,
- 呼叫
Update()
後立即執行。您可能已在上一個工作階段取得同意聲明。建議您最好不要等待回呼完成,以便在應用程式啟動後盡快載入廣告。
如果在收集同意聲明的過程中發生錯誤,您還是可以嘗試請求廣告。UMP SDK 會使用上一個工作階段的同意聲明狀態。
void Start()
{
// Create a ConsentRequestParameters object.
ConsentRequestParameters request = new ConsentRequestParameters();
// Check the current consent information status.
ConsentInformation.Update(request, OnConsentInfoUpdated);
}
void OnConsentInfoUpdated(FormError consentError)
{
if (consentError != null)
{
// Handle the error.
UnityEngine.Debug.LogError(consentError);
return;
}
// If the error is null, the consent information state was updated.
// You are now ready to check if a form is available.
ConsentForm.LoadAndShowConsentFormIfRequired((FormError formError) =>
{
if (formError != null)
{
// Consent gathering failed.
UnityEngine.Debug.LogError(consentError);
return;
}
// Consent has been gathered.
if (ConsentInformation.CanRequestAds())
{
MobileAds.Initialize((InitializationStatus initstatus) =>
{
// TODO: Request an ad.
});
}
});
}
隱私權選項
部分同意聲明表單會要求使用者隨時修改同意聲明。如有需要,請按照下列步驟導入隱私權選項按鈕。
為了達到這個目的:
- 實作可觸發隱私權選項表單的 UI 元素,例如應用程式設定頁面中的按鈕。
- 完成
LoadAndShowConsentFormIfRequired()
完成後,請檢查PrivacyOptionsRequirementStatus
判斷是否要顯示能顯示隱私權選項表單的 UI 元素。 - 當使用者與您的 UI 元素互動時,請呼叫
ShowPrivacyOptionsForm()
來顯示表單,方便使用者隨時更新隱私權選項。
以下範例說明如何顯示來自 Button
的隱私權選項表單。
[SerializeField, Tooltip("Button to show the privacy options form.")]
private Button _privacyButton;
private void Start()
{
// Enable the privacy settings button.
if (_privacyButton != null)
{
_privacyButton.onClick.AddListener(UpdatePrivacyButton);
// Disable the privacy settings button by default.
_privacyButton.interactable = false;
}
}
/// <summary>
/// Shows the privacy options form to the user.
/// </summary>
public void ShowPrivacyOptionsForm()
{
Debug.Log("Showing privacy options form.");
ConsentForm.ShowPrivacyOptionsForm((FormError showError) =>
{
if (showError != null)
{
Debug.LogError("Error showing privacy options form with error: " + showError.Message);
}
// Enable the privacy settings button.
if (_privacyButton != null)
{
_privacyButton.interactable =
ConsentInformation.PrivacyOptionsRequirementStatus ==
PrivacyOptionsRequirementStatus.Required;
}
});
}
測試
如要在開發過程中測試應用程式的整合作業,請按照下列步驟,以程式輔助方式註冊測試裝置。發布應用程式之前,請務必移除用來設定這些測試裝置 ID 的程式碼。
- 呼叫
Update()
。 查看記錄輸出中是否有類似以下範例的訊息,這些訊息顯示您的裝置 ID 以及如何將其新增為測試裝置:
Android
Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.
iOS
<UMP SDK>To enable debug mode for this device, set: UMPDebugSettings.testDeviceIdentifiers = @[2077ef9a63d2b398840261c8221a0c9b]
將測試裝置 ID 複製到剪貼簿。
修改程式碼以 呼叫
DebugGeography.TestDeviceHashedIds
,並傳入 測試裝置 ID 清單。void Start() { var debugSettings = new ConsentDebugSettings { TestDeviceHashedIds = new List<string> { "TEST-DEVICE-HASHED-ID" } }; // Create a ConsentRequestParameters object. ConsentRequestParameters request = new ConsentRequestParameters { ConsentDebugSettings = debugSettings, }; // Check the current consent information status. ConsentInformation.Update(request, OnConsentInfoUpdated); }
強迫一個地理
UMP SDK 可讓您使用 the DebugGeography
field on ConsentDebugSettings
測試應用程式行為,就像裝置在歐洲經濟區或英國一樣。請注意,偵錯設定僅適用於測試裝置。
void Start()
{
var debugSettings = new ConsentDebugSettings
{
// Geography appears as in EEA for debug devices.
DebugGeography = DebugGeography.EEA,
TestDeviceHashedIds = new List<string>
{
"TEST-DEVICE-HASHED-ID"
}
};
// Create a ConsentRequestParameters object.
ConsentRequestParameters request = new ConsentRequestParameters
{
ConsentDebugSettings = debugSettings,
};
// Check the current consent information status.
ConsentInformation.Update(request, OnConsentInfoUpdated);
}
重設同意聲明狀態
使用 UMP SDK 測試應用程式時,建議您重設 SDK 狀態,以便模擬使用者的首次安裝體驗。但 SDK 提供的 Reset()
方法可以執行這項操作。
ConsentInformation.Reset();