同意管理
iOS(Swift)で同意管理を実装する方法を学びます。
使用法
同意管理モジュールは、トラッキングの同意を細かく管理するためのシンプルなAPIを提供します。これはすべてのAppleプラットフォーム(iOS、iPadOS、tvOS、watchOS、macOS、macOS Catalyst)でサポートされています。
Tealium Swiftライブラリのバージョン2.xでは、同意管理モジュールに重要な変更が導入されています。
- 同意管理はデフォルトで無効化されています(有効にするには完全な同意を参照してください)
- 同意管理は
TealiumCore
モジュールに統合されています - CCPAサポートが導入されました
- 同意の有効期限オプション
同意管理と同意ポリシーについて詳しく学びましょう。
同意
ポリシーの構成
初期化時に同意ポリシーを次のいずれかに構成します。
.gdpr
.ccpa
同意管理モジュールは、コアライブラリに含まれており、同意ポリシーが構成されるまでアクティブになりません。
デバイスで同時に1つのポリシーのみが強制されます。
GDPRポリシーを構成するには:
class TealiumHelper {
var tealium: Tealium?
private func initTealium() {
let config = TealiumConfig(...)
config.consentPolicy = .gdpr
//...
}
}
同意のステータスが変更されるたびに生成される同意ログイベントを構成するには:
config.consentLoggingEnabled = true
同意の有効期限
consentExpiry
プロパティを使用して、同意の選択の有効期限を構成します。
次の例では、同意管理ポリシーをGDPRに構成し、有効期限を90日に構成しています。
class TealiumHelper {
var tealium: Tealium?
private func initTealium() {
let config = TealiumConfig(...)
config.consentPolicy = .gdpr
config.consentExpiry = (90, .days)
//...
}
}
同意が期限切れになったときにコールバックをトリガーするには、TealiumConfig
オブジェクトでコールバックを定義します:
class TealiumHelper {
var tealium: Tealium?
private func initTealium() {
let config = TealiumConfig(...)
config.consentPolicy = .gdpr
config.consentExpiry = (90, .days)
config.onConsentExpiration = {
print("同意が期限切れになりました")
}
//...
}
}
または、TealiumConsentManager
オブジェクトでコールバックを定義します:
tealium = Tealium(config: config) { [weak self] _ in
self?.tealium?.consentManager?.onConsentExpiration = {
print("同意が期限切れになりました")
}
}
完全な同意の構成
完全な同意を構成するには:
func grantFullConsent() {
self.tealium?.consentManager?.userConsentStatus = .consented
}
カテゴリごとの部分的な同意の構成
部分的な同意を構成するには、同意カテゴリのサブセットを指定します。これにより、userConsentStatus
が.consented
に暗黙的に構成されます。
func grantPartialConsent(categories: [TealiumConsentCategories]) {
self.tealium?.consentManager?.userConsentCategories = categories
}
使用例:grantPartialConsent([.analytics, .cdp])
(パラメータのカテゴリを参照)
同意を拒否する
同意を拒否するには、同意ステータスを構成します:
func declineConsent() {
self.tealium?.consentManager?.userConsentStatus = .notConsented
}
カスタム同意
組織の同意要件が標準のGDPRおよびCCPAポリシーでカバーされていない場合は、カスタム同意ポリシーを作成します。
ConsentPolicy
プロトコルを実装します。
class SomeCustomConsentPolicy: ConsentPolicy {
// メソッドを実装...
}
TealiumConfig
オブジェクトのconsentPolicy
プロパティを使用して、新しいカスタムポリシーを.custom
列挙型と関連付けたタイプを使用して構成します。
config.consentPolicy = .custom(SomeCustomConsentPolicy.self)
カスタム同意ポリシーが実装されたら、必要に応じてConsentPolicy
で利用可能な次のプロパティをオーバーライドします。
プロパティ | タイプ | 説明 |
---|---|---|
name |
String |
ConsentPolicy の名前 |
consentPolicyStatusInfo |
[String: Any]? |
各TealiumDispatch のペイロードに追加されるキー値データの[String: Any] を返します |
consentTrackingEventName |
String |
同意の変更をログに記録するときに使用するイベント名(キー:tealium_event )を構成します |
defaultConsentExpiry |
(time: Int, unit: TimeUnit) |
このConsentPolicy のデフォルトの有効期限を構成します |
preferences |
UserConsentPreferences |
偏好が変更されるたびにConsentManager によって自動的に更新される現在のUserConsentPreferences |
shouldLogConsentStatus |
Bool |
同意の変更のログ記録が必要かどうかを構成します |
shouldUpdateConsentCookie |
Bool |
TagManagementモジュールのWebビューでクッキーを更新するかどうかを構成します |
trackAction |
TealiumConsentTrackAction |
同意ステータスに基づくトラッキングアクション(許可、禁止、キュー) |
updateConsentCookieEventName |
String |
shouldUpdateConsentCookie がtrueに構成されている場合に使用するイベント名を構成します |
以下は、カスタム同意ポリシーの完全な例です。
class MyCustomConsentPolicy: ConsentPolicy {
var preferences: UserConsentPreferences
required init(_ preferences: UserConsentPreferences) {
self.preferences = preferences
}
var name: String = "my custom policy"
var defaultConsentExpiry: (time: Int, unit: TimeUnit) = (90, .days)
var shouldUpdateConsentCookie: Bool = false
var updateConsentCookieEventName: String = "custom_consent_update"
var consentPolicyStatusInfo: [String : Any]? {
["custom_consent_status": preferences.consentStatus.rawValue,
"custom_consent_categories": preferences.consentCategories?.map({ $0.rawValue }),
"custom_policy_key": name]
}
var trackAction: TealiumConsentTrackAction = .trackingAllowed
var consentTrackingEventName: String = "custom_consent_update"
var shouldLogConsentStatus: Bool = true
}
var tealium: Tealium?
let config = TealiumConfig(...)
config.consentPolicy = .custom(MyCustomConsentPolicy.self)
/// ... 他の構成オプション
tealium = Tealium(config: config)
カスタムポリシーを作成し、GDPRConsentPolicyCreatable
またはCCPAConsentPolicyCreatable
プロトコルに準拠させます。カスタムポリシーを作成し、必要なものをオーバーライドした後、config.consentPolicy
を.custom(YourCustomPolicy.self)
に構成します。
例
既存のGDPR実装を使用しながら、ポリシーの名前をオーバーライドする(トラッキングペイロードのpolicy
値をオーバーライド):
class CustomGDPRConsentPolicy: GDPRConsentPolicyCreatable {
var preferences: UserConsentPreferences
required init(_ preferences: UserConsentPreferences) {
self.preferences = preferences
}
var name: String {
"customGDPRPolicy"
}
}
config.consentPolicy = .custom(CustomGDPRConsentPolicy.self)
ポリシーデータキーをリマップして、Tealium EventStreamの固定された同意値を回避する:
class CustomGDPRConsentPolicy: GDPRConsentPolicyCreatable {
var preferences: UserConsentPreferences
required init(_ preferences: UserConsentPreferences) {
self.preferences = preferences
}
var consentPolicyStatusInfo: [String : Any]? {
["custom_consent_status": preferences.consentStatus.rawValue,
"custom_consent_categories": preferences.consentCategories?.map({ $0.rawValue }),
"custom_policy_key": "customGDPRPolicy"]
}
}
送信される同意ログイベント名をカスタマイズする:
class CustomGDPRConsentPolicy: GDPRConsentPolicyCreatable {
var preferences: UserConsentPreferences
required init(_ preferences: UserConsentPreferences) {
self.preferences = preferences
}
var consentTrackingEventName: String {
switch preferences.consentStatus {
case .consented:
return "user_consented"
case .notConsented:
return "user_not_consented"
case .unknown:
return "user_consent_unknown"
}
}
}
サードパーティの同意値を返す場合は、thirdPartyConsentProvider
が別の同意プロバイダへの参照である場合:
class CustomGDPRConsentPolicy: GDPRConsentPolicyCreatable {
let thirdPartyConsentProvider = ThirdPartyProvider()
var preferences: UserConsentPreferences
required init(_ preferences: UserConsentPreferences) {
self.preferences = preferences
}
var consentPolicyStatusInfo: [String: Any]? {
let status = thirdPartyConsentProvider.getConsent()
return ["my_consent_status": status]
}
}
ユースケース
完全な同意
次の例では、ユーザーに同意ポリシーに同意または拒否するオプションを提供し、ユーザーが同意または拒否した後、選択した同意ポリシーのルールが適用されます。同意ポリシーについて詳しく学びましょう。
func setConsentStatusSimple(_ consented: Bool) {
let status: TealiumConsentStatus = consented ? .consented: .notConsented
self.tealium?.consentManager?.userConsentStatus = status
}
Tealium Helperクラスでメソッドを定義し、アプリのユーザーがトラッキングに同意または拒否するときに呼び出します。ユーザーがトラッキングに同意する場合、同意マネージャーは自動的にすべてのトラッキングカテゴリにユーザーを含めます。
カテゴリごとの部分的な同意(GDPR)
カテゴリベースの同意では、ユーザーは全カテゴリのリストから各カテゴリを明示的に選択する必要があります。
次のヘルパーメソッドは、TealiumConsentManager
APIからメソッドを呼び出します:
func updateConsentPreferences(_ dict: [String: Any]) {
var tealiumConsentCategories = [TealiumConsentCategories]()
if let categories = dict["consentCategories"] as? [String] {
tealiumConsentCategories = TealiumConsentCategories.consentCategoriesStringArrayToEnum(categories)
tealium.consentManager?.userConsentCategories = tealiumConsentCategories
} else if let status = dict["consentStatus"] as? String {
let tealiumConsentStatus = (status == "consented") ? TealiumConsentStatus.consented : TealiumConsentStatus.notConsented
self.tealium?.consentManager?.consentStatus = status
}
}
}
リストのカテゴリを更新するには:
func setUserConsentPreferences(_ categories: [String]){
let settingsDict: [String: Any] = ["consentStatus": "consented", "consentCategories": categories]
updateConsentPreferences(settingsDict)
}
カテゴリグループ(GDPR)
カテゴリベースの同意モデルでは、トラッキングカテゴリは、顧客が定義する少数の上位カテゴリにグループ化されます。
たとえば、Tealiumの同意カテゴリ"big_data"
、"analytics"
、"monitoring"
を"performance"
という単一のカテゴリにグループ化することを選択することができます。これは、ユーザーが全カテゴリから選択するよりも簡単な場合があります。これをスライダーインターフェースで表現し、最も制限の少ないものから最も制限の多いもの(すべてのカテゴリ)までの範囲とします。
func updateConsentPreferences(_ dict: [String: Any]) {
var tealiumConsentCategories = [TealiumConsentCategories]()
if let categories = dict["consentCategories"] as? [String] {
tealiumConsentCategories = TealiumConsentCategories.consentCategoriesStringArrayToEnum(categories)
tealium.consentManager?.userConsentCategories = tealiumConsentCategories
} else if let status = dict["consentStatus"] as? String {
let tealiumConsentStatus = (status == "consented") ? TealiumConsentStatus.consented : TealiumConsentStatus.notConsented
self.tealium?.consentManager?.consentStatus = status
}
}
}
次のヘルパー関数では、カテゴリのグループを定義し、ユーザーの同意構成を構成します:
func setUserConsentPreferences(){
let consentGroups = ["Off" : [],
"Performance": ["analytics", "monitoring", "big_data", "mobile", "crm"],
"Marketing": ["analytics", "monitoring", "big_data", "mobile", "crm", "affiliates", "email", "search", "engagement", "cdp"],
"Personalized Advertising": ["analytics", "monitoring", "big_data", "mobile", "crm", "affiliates", "email", "search", "engagement", "cdp", "display_ads", "personalization", "social", "cookiematch", "misc"]]
let userSelection = "Marketing"
if let userList = consentGroups[userSelection] {
let settingsDict: [String: Any] = ["consentStatus": "consented", "consentCategories": userList]
updateConsentPreferences(settingsDict)
}
}
サンプルアプリ
ライブラリ、トラッキングメソッド、およびベストプラクティスの実装に慣れるために、Tealium for Swift 同意マネージャーサンプルアプリを探索してください。
最終更新日 :: 2024年May月15日