iOS SDK - ユーザーIDとハッシュ化 User Details の設定

ユーザー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に送信します。

Swift Objective-C
// 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をクリアしてください。

Swift Objective-C
// 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はハッシュ化の前に空白を削除して小文字に変換します。gmail.com および googlemail.com のアドレスについては、ローカル部分から +tag サフィックスとすべてのドットを削除した2番目のバリアントも生成します。

例: user@example.com

setPhoneNumber

モード: SDKハッシュ化

平文の電話番号です。SDKは2つのバリアントを生成します。先頭の + を保持して他の非数字を削除したE.164形式と、+ も削除した数字のみの形式です。E.164バリアントを利用できるよう国番号を含めてください。

例: +15551234567

setEmailSTD

モード: 事前ハッシュ化

空白の削除と小文字変換を行った後のメールアドレスのSHA-256ハッシュです。

setEmailNoDots

モード: 事前ハッシュ化

空白の削除、小文字変換、ローカル部分の +tag サフィックスとすべてのドットの削除を行った後のメールアドレスのSHA-256ハッシュです。Gmail形式のアドレスに適用されます。

setPhoneE164

モード: 事前ハッシュ化

先頭の + を保持したE.164形式の電話番号のSHA-256ハッシュです。

setPhoneDigits

モード: 事前ハッシュ化

先頭の + を含むすべての非数字を削除した電話番号のSHA-256ハッシュです。

すべてのセッターには、設定した値を返す対応するゲッター(getEmailgetPhoneNumbergetEmailSTDgetEmailNoDotsgetPhoneE164getPhoneDigits)があります。


初期化時に User Details を設定する

start を呼び出す前にオブジェクトを SingularConfig.userDetails に割り当てると、SDKが送信する最初のセッションに User Details が付加されます。

Swift Objective-C
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)

初期化後に User Details を設定する

メールアドレスや電話番号がログインまたは登録後にしかわからない場合は、その時点で setUserDetails を呼び出してください。それ以降、SDKが送信するすべてのセッションとイベントに値が付加されます。

Swift Objective-C
// 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)

メソッドシグネチャ:

+ (void)setUserDetails:(SingularUserDetails *)userDetails;

User Details をクリアする

保存された User Details は iOS Keychain に保持され、アプリの起動をまたいで残ります。ログアウト時、またはユーザーが同意を撤回した際に clearUserDetails を呼び出して削除してください。

Swift Objective-C
// Remove stored user details on logout
Singular.clearUserDetails()

メソッドシグネチャ:

+ (void)clearUserDetails;

注意: 値が永続化されるため、後の起動で SingularConfig.userDetails を割り当てても以前に保存された値は消去されません。削除する唯一の方法は clearUserDetails です。


検証とプライバシー動作

  • メールアドレスの検証: 平文のメールアドレスには @ が正確に1つ含まれ、その後にドットが必要です。無効な値は拒否されログに記録され、送信されません。
  • 電話番号の検証: 平文の電話番号には少なくとも6桁の数字が必要です。それより短い値は拒否されログに記録されます。
  • モード誤用の防止: すでにハッシュ化されているように見える値は setEmailsetPhoneNumber で拒否されます。同様に、事前ハッシュ化用のセッターは64文字のSHA-256の16進文字列以外を拒否します。
  • Limit Data Sharing: Limit Data Sharing が有効な間は、User Details ペイロードがすべてのリクエストから除外されます。 参照: データプライバシー.
  • 同意: 法的根拠がある場合にのみ、メールアドレスと電話番号を収集して送信してください。ハッシュ化はGDPR、CCPA、または同等の規制に基づく義務を免除するものではありません。