ユーザーIDとハッシュ化 User Details の設定
社内のユーザーIDをSingularに送信して、クロスデバイストラッキングと ユーザーレベルのデータレポートを有効化します。
注意: Singularの クロスデバイスソリューション を使用する場合、すべてのプラットフォームで ユーザーIDを収集する必要があります。
ユーザーIDの要件
プライバシーとベストプラクティス
ユーザーIDトラッキングを実装する際は、プライバシーコンプライアンスと正確な クロスデバイス測定を確保するため、以下のガイドラインに従ってください。
- PIIの使用禁止: ユーザーIDには、メールアドレス、ユーザー名、電話番号など 個人を特定できる情報(PII)を含めないでください。自社データに固有の ハッシュ化された値を使用してください。 メールアドレスや電話番号を送信する場合は、代わりに専用の ハッシュ化 User Details APIを使用してください。
- プラットフォーム間の一貫性: ユーザーIDの値は、正確なクロスデバイス測定のために すべてのプラットフォーム(Web/モバイル/PC/コンソール/オフライン)で取得する 同じ内部識別子である必要があります。
- 自社データ: Singularはユーザーレベルのエクスポート、ETL、社内BIポストバック (構成されている場合)にユーザーIDを含めます。 ユーザーIDは自社データであり、第三者と共有されることはありません。
-
永続性:
ユーザーIDは
unsetCustomUserId()を使用して明示的に解除するか、アプリがアンインストールされるまで 保持されます。アプリを閉じたり再起動したりしても、ユーザーIDは クリアされません。
実装の概要
ユーザーIDを設定するタイミング
ユーザー識別子を設定するには
setCustomUserId()
を、ログアウト時にクリアするには
unsetCustomUserId()
を使用します。
ベストプラクティス:
複数のユーザーが1台のデバイスを共有する場合、
ログイン時に
setCustomUserId()
を呼び出し、ログアウト時に
unsetCustomUserId()
を呼び出すログアウトフローを実装してください。
アプリ起動時にすでにユーザーIDがわかっている場合は、Singular SDKを初期化する前に
setCustomUserId()
を呼び出してください。
これにより、Singularは最初のセッションからユーザーIDを受け取ります。ただし、
通常はユーザーが登録またはログインするまでユーザーIDは利用できないため、
その場合は登録または認証フローが完了した後に
setCustomUserId()
を呼び出してください。
SDKメソッド
Custom User IDの設定
クロスデバイストラッキングとユーザーレベルのレポートのために、社内のユーザーIDを Singularに送信します。
// Set the user ID after login or registration
Singular.setCustomUserId("custom_user_id")
// Set the user ID after login or registration
[Singular setCustomUserId:@"custom_user_id"];
メソッドシグネチャ:
+ (void)setCustomUserId:(NSString *)customUserId;
+setCustomUserId:
は
void
を返します。呼び出し時点での成功/失敗のシグナルはありません。ユーザーIDは
SDKが送信する次のセッションおよびイベントに付加されます。
名前が似ている
+setDeviceCustomUserId:
は
__attribute__((deprecated))
と注釈されており、レガシー互換性のためにのみ存在します。新しいコードでは常に
+setCustomUserId:
を呼び出してください。
Custom User IDの解除
マルチユーザーデバイスで正確なセッショントラッキングを確保するため、ユーザーが ログアウトしたらユーザーIDをクリアしてください。
// Unset the user ID on logout
Singular.unsetCustomUserId()
// Unset the user ID on logout
[Singular unsetCustomUserId];
メソッドシグネチャ:
+ (void)unsetCustomUserId;
ハッシュ化 User Details(メールアドレスと電話番号)
上記のユーザーIDは、お客様独自の不透明な識別子です。ユーザーのメールアドレスや電話番号もSingularに送信する場合は、別のSingularUserDetails APIを使用してください。SDKがデバイス上で値を正規化してSHA-256でハッシュ化するため、生のメールアドレスと電話番号が送信されることはありません。
対応バージョン: iOS SDK バージョン 12.14.0 以降。このAPIは Kids SDK バージョンでは利用できません。
ハッシュ化モードの選択
User Details を渡す方法は2つあります。ユーザーごとに1つを選び、一貫して使用してください。
- SDKハッシュ化(推奨): 平文のメールアドレスまたは電話番号を渡します。SDKが値を正規化してハッシュ化し、Singularがマッチングに使用できるすべてのバリアントを生成します。
- 事前ハッシュ化: ご自身で正規化してSHA-256でハッシュ化した値を渡します。SDKは渡された値をそのまま保存し、それ以上の処理は行いません。呼び出し時点でアプリが平文の User Details を保持できない場合に使用してください。
重要: 平文の値と対応する事前ハッシュ化バリアントの両方を設定した場合、事前ハッシュ化した値が優先されます。
SingularUserDetails のセッター
| セッター | 詳細 |
|---|---|
setEmail
|
モード: SDKハッシュ化
平文のメールアドレスです。SDKはハッシュ化の前に空白を削除して小文字に変換します。
例:
|
setPhoneNumber
|
モード: SDKハッシュ化
平文の電話番号です。SDKは2つのバリアントを生成します。先頭の
例:
|
setEmailSTD
|
モード: 事前ハッシュ化 空白の削除と小文字変換を行った後のメールアドレスのSHA-256ハッシュです。 |
setEmailNoDots
|
モード: 事前ハッシュ化
空白の削除、小文字変換、ローカル部分の |
setPhoneE164
|
モード: 事前ハッシュ化
先頭の |
setPhoneDigits
|
モード: 事前ハッシュ化
先頭の |
すべてのセッターには、設定した値を返す対応するゲッター(getEmail、getPhoneNumber、getEmailSTD、getEmailNoDots、getPhoneE164、getPhoneDigits)があります。
初期化時に User Details を設定する
start を呼び出す前にオブジェクトを SingularConfig.userDetails に割り当てると、SDKが送信する最初のセッションに User Details が付加されます。
let config = SingularConfig(apiKey: "SDK KEY", andSecret: "SDK SECRET")
let userDetails = SingularUserDetails()
userDetails.setEmail("user@example.com")
userDetails.setPhoneNumber("+15551234567")
config.userDetails = userDetails
Singular.start(config)
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK KEY"
andSecret:@"SDK SECRET"];
SingularUserDetails *userDetails = [SingularUserDetails new];
[userDetails setEmail:@"user@example.com"];
[userDetails setPhoneNumber:@"+15551234567"];
config.userDetails = userDetails;
[Singular start:config];
初期化後に User Details を設定する
メールアドレスや電話番号がログインまたは登録後にしかわからない場合は、その時点で setUserDetails を呼び出してください。それ以降、SDKが送信するすべてのセッションとイベントに値が付加されます。
// Cleartext values, hashed by the SDK
let userDetails = SingularUserDetails()
userDetails.setEmail("user@example.com")
userDetails.setPhoneNumber("+15551234567")
Singular.setUserDetails(userDetails)
// Or supply your own SHA-256 hashes
let hashed = SingularUserDetails()
hashed.setEmailSTD("b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514")
hashed.setPhoneE164("8a59780bb8cd2ba022bfa5ba2ea3b6e07af17a7d8b30c1f9b3390e36f69019e4")
Singular.setUserDetails(hashed)
// Cleartext values, hashed by the SDK
SingularUserDetails *userDetails = [SingularUserDetails new];
[userDetails setEmail:@"user@example.com"];
[userDetails setPhoneNumber:@"+15551234567"];
[Singular setUserDetails:userDetails];
// Or supply your own SHA-256 hashes
SingularUserDetails *hashed = [SingularUserDetails new];
[hashed setEmailSTD:@"b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514"];
[hashed setPhoneE164:@"8a59780bb8cd2ba022bfa5ba2ea3b6e07af17a7d8b30c1f9b3390e36f69019e4"];
[Singular setUserDetails:hashed];
メソッドシグネチャ:
+ (void)setUserDetails:(SingularUserDetails *)userDetails;
User Details をクリアする
保存された User Details は iOS Keychain に保持され、アプリの起動をまたいで残ります。ログアウト時、またはユーザーが同意を撤回した際に clearUserDetails を呼び出して削除してください。
// Remove stored user details on logout
Singular.clearUserDetails()
// Remove stored user details on logout
[Singular clearUserDetails];
メソッドシグネチャ:
+ (void)clearUserDetails;
注意:
値が永続化されるため、後の起動で SingularConfig.userDetails を割り当てても以前に保存された値は消去されません。削除する唯一の方法は clearUserDetails です。
検証とプライバシー動作
-
メールアドレスの検証:
平文のメールアドレスには
@が正確に1つ含まれ、その後にドットが必要です。無効な値は拒否されログに記録され、送信されません。 - 電話番号の検証: 平文の電話番号には少なくとも6桁の数字が必要です。それより短い値は拒否されログに記録されます。
-
モード誤用の防止:
すでにハッシュ化されているように見える値は
setEmailとsetPhoneNumberで拒否されます。同様に、事前ハッシュ化用のセッターは64文字のSHA-256の16進文字列以外を拒否します。 - Limit Data Sharing: Limit Data Sharing が有効な間は、User Details ペイロードがすべてのリクエストから除外されます。 参照: データプライバシー.
- 同意: 法的根拠がある場合にのみ、メールアドレスと電話番号を収集して送信してください。ハッシュ化はGDPR、CCPA、または同等の規制に基づく義務を免除するものではありません。