同意管理
iOS(Swift)で同意管理を実装する方法を学びます。
使用法
Consent Managerモジュールは、トラッキング同意を細かいレベルで管理するためのシンプルなAPIを提供します。すべてのAppleプラットフォーム(iOS、iPadOS、tvOS、watchOS、macOS、macOS Catalyst)でサポートされています。
Tealium Swiftライブラリのバージョン2.xでは、Consent Managerモジュールに重要な変更が加えられました:
- デフォルトでConsent Managerが無効化(有効化するにはFull Consentを参照)
- Consent Managerが
TealiumCore
モジュールに組み込まれる - CCPAのサポートが導入される
- 同意の有効期限オプションが追加される
Consent Managementと同意ポリシーについて詳しく学びましょう。
同意
ポリシーの構成
初期化時に同意ポリシーを以下のいずれかに構成します:
.gdpr
.ccpa
Consent Managementモジュールはコアライブラリに含まれていますが、同意ポリシーが構成されるまではアクティブになりません。
一度にデバイス上で強制できるポリシーは一つだけです。
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("Consent expired")
}
//...
}
}
あるいは、TealiumConsentManager
オブジェクト上でコールバックを定義します:
tealium = Tealium(config: config) { [weak self] _ in
self?.tealium?.consentManager?.onConsentExpiration = {
print("Consent expired")
}
}
全面的な同意の構成
全面的な同意を構成するには:
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 {
// implement methods...
}
TealiumConfig
オブジェクトのconsentPolicy
プロパティを、TealiumConsentPolicy.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モジュールのwebview内のクッキーを更新するかどうかを構成します |
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)
/// ... other configuration options
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クラスでメソッドを定義し呼び出します。ユーザーがトラッキングに同意すると、Consent Managerは自動的にすべてのトラッキングカテゴリにユーザーを含めます。
カテゴリ別の部分的な同意 (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 Consent Manager sample appをご覧ください。
最終更新日 :: 2025年January月10日