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