UID2 Client-Side Integration Guide for Mobile
このガイドは、モバイルアプリのみの変更で UID2 とインテグレーションしたいモバイルアプリパブリッシャー向けです。
以下の手順は、Private Operator を使用したいパブリッシャーや、Server-Side でトークンを生成したいパブリッシャーには適用されません。これらのパブリッシャーは、Client-Server Integration Guide for Mobile に従う必要があります。
このページでは、インテグレーション手順の概要と、追加のドキュメントへのリンクを提供します。
UID2 は、Android および iOS 向けのモバイル SDK を提供しています。各 SDK には以下の機能があります:
- UID2 identity (UID2 Token と関連する値) を生成し、ローカルファイルストレージに保存します。
- UID2 Token を自動的にリフレッシュします。
このガイドの、UID2 mobile SDKs は、SDK for Android と SDK for iOS の両方を含むグループ用語です。
モバイルパブリッシャーインテグレーションに関する FAQs については、FAQs for Mobile Integrations を参照してください。
UID2 を Client-Side でインテグレーションするには、以下の手順を完了する必要があります:
-
Check that the token was successfully generated and then pass it for bidstream use.
-
Optionally, integrate the UID2 GMA/IMA Plugin for GAM Secure Signals integration.
Mobile SDK Version
このガイドは、次のいずれかの UID2 mobile SDK のバージョン 1.2.0 以上を使用する方法について説明します:
- SDK for Android
- SDK for iOS
正しい SDK/バージョンをモバイルアプリにインストールする手順については、Add the UID2 Mobile SDK to Your Mobile App を参照してください。
Client-Side Integration Example
UID2 mobile SDK の設定方法と、モバイル用の Client-Side インテグレーションを使用したトークンの生成方法の例については、UID2 開発アプリを試してください。
Android または iOS 向けの適用可能な手順に従ってください:
- Android
- iOS
- SDK for Android source code repository on GitHub の main ブランチをチェックアウトします。
- Android Studio (Jellyfish/v2023.3.1 または SDK for Android リリース時に必要な Android Gradle Plugin バージョンをサポートする将来のバージョン) で、チェックアウトしたディレクトリを開きます。
- dev-app アプリを実行します。
- アプリを起動したら、Client Side チェックボックスがチェックされていることを確認します。
- メールアドレスまたは電話番号を入力し、右側の矢印をクリックします。
-
main branch of the UID2 SDK For iOS source code repository on GitHub をチェックアウトします。
-
Xcode で、このプロジェクトファイルを開きます:
Development/UID2SDKDevelopmentApp/UID2SDKDevelopmentApp.xcodeproj
-
UID2SDKDevelopmentApp アプリのスキームを実行します。
-
アプリを起動したら、Client Side チェックボックスがチェックされていることを確認します。
-
メールアドレスまたは電話番号を入力し、右側の矢印をクリックします。
アプリの背後で、開発アプリは次の UID2 SDK API コールを行います。このコールは、メール/電話番号入力に対して UID2 Service に identity (UID2 Token と関連する値) を生成するリクエストを送信します:
- Android
- iOS
UID2Manager.getInstance().generateIdentity(
identityRequest: IdentityRequest,
subscriptionId: String,
publicKey: String,
onResult: (GenerateIdentityResult) -> Unit
)
UID2Manager.shared.generateIdentity(
_ identity: IdentityType,
subscriptionID: String,
serverPublicKey: String,
appName: String? = nil
)
API コールが成功すると、アプリは生成された identity を表示し、UID2Manager
クラス内に永続化します。
identity には、getAdvertisingToken()
メソッドコールで取得できる UID2 Advertising Token が含まれます:
- Android
- iOS
UID2Manager.getInstance().getAdvertisingToken()
UID2Manager.shared.getAdvertisingToken()
このメソッドコールは、広告リクエストを行うために必要な値を返します: 詳細は Pass Generated Token for Bidstream Use を参照してください。
Testing With Your Own Configuration
デフォルトでは、開発アプリは Subscription ID と public key のデフォルト値を使用します。これらの値は、次のオブジェクトに保存されています:
- Android
- iOS
com.uid2.dev.ui.MainScreenViewModel.Companion
RootViewModel
デフォルトでは、開発アプリは UID2 インテグレーション環境に接続されています。これは、次の Android メソッドコール/iOS ファイルで指定されています:
- Android
- iOS
com.uid2.UID2Manager.Companion#init
see UID2SDKDevelopmentApp/UID2SDKDevelopmentApp/Info.plist
必要に応じて、デフォルトの Subscription ID と public key を割り当てられた値に変更し、UID2 本番環境に接続することもできます。詳細は Optional: Specifying the API Base URL to Reduce Latency を参照してください。
Complete the UID2 Account Setup
アカウントをセットアップするには、Account Setup に記載されている手順に従ってください。アカウントセットアッププロセスの一環として、UID2 mobile SDK とインテグレーションするすべてのモバイルアプリの app names のリストを提供する必要があります。これには、以下の値が該当します:
- Android Application ID
- iOS Bundle Identifier
- iOS App Store ID
アカウントのセットアップが完了すると、UID2 サーバーがユーザーを識別するために使用する 2 つの値であるクライアントキーペアが発行されます: Subscription ID と Public key。これらの値はあなたに固有で、UID2 モジュールの設定に使用します。詳細は Subscription ID and Public Key を参照してください。
Add the UID2 Mobile SDK to Your Mobile App
Mobile SDK をアプリに追加するには、適用可能な以下のドキュメントに従ってください:
SDK をアプリに追加したら、SDK を使用して UID2 Token を生成する準備が整います。
Using the UID2 Integration Environment
デフォルトでは、SDK は UID2 本番環境で動作するように構成されています: https://prod.uidapi.com
。代わりにインテグレーション環境を使用する場合は、UID2Manager
の初期化に次の URL を指定してください:
- Android
- iOS
UID2Manager.init(
context = this,
UID2Manager.Environment.Custom("https://operator-integ.uidapi.com")
)
// Must be set before UID2Manager.shared is accessed
UID2Settings.shared.uid2Environment = .custom(
url: URL(string: "https://operator-integ.uidapi.com")!
)
次のような環境間の違いに注意してください:
- UID2 インテグレーション環境のトークンは、ビッドストリームに渡しても有効ではありません。
- 各環境(インテグレーションおよび本番)には異なる API Key とクライアントシークレット値があります。各環境で正しい値を使用してください。
Optional: Specifying the API Base URL to Reduce Latency
デフォルトでは、この SDK は米国の UID2 本番環境サーバーにリクエストを送信します。
ユースケースに最適な URL を選択する方法と、有効なベース URL の完リストについては、Environments を参照してください。
別の UID2 サーバを指定するには、次の例に示すように構成変更を行います:
- Android
- iOS
UID2Manager.init(
context = this,
UID2Manager.Environment.Custom("https://global.prod.uidapi.com")
)
// or use a named environment
UID2Manager.init(
context = this,
UID2Manager.Environment.Sydney
)
// Must be set before UID2Manager.shared is accessed
UID2Settings.shared.uid2Environment = .custom(
url: URL(string: "https://global.prod.uidapi.com")!
)
// or use a named environment
UID2Settings.shared.uid2Environment = .sydney
Configure the UID2 Mobile SDK
UID2 は、以下の値を提供します。これらは、UID2 Token を Client-Side クライアで生成する際に必要です:
- Subscription ID
- Public key
これらの値は、アカウントセットアップ時に受け取ります。インテグレーション環境用の 1 つのセットと、本番環境用の別のセットがあります。
SDK を構成するには、アカウントセットアップ時に受け取った Subscription ID と public key、およびユーザーのハッシュ化またはハッシュ化されていない直接識別情報 (DII) (メールアドレスまたは電話番号) を次のメソッドコールに渡す必要があります:
- Android
- iOS
UID2Manager.getInstance().generateIdentity(
identityRequest: IdentityRequest,
subscriptionId: String,
publicKey: String,
onResult: (GenerateIdentityResult) -> Unit
)
UID2Manager.shared.generateIdentity(
_ identity: IdentityType,
subscriptionID: String,
serverPublicKey: String,
appName: String? = nil
)
設定が完了すると、UID2 mobile SDK は以下の操作を行います:
- ユーザーの UID2 identity (トークンを含む) を生成します。
- トークンをユーザーのデバイスにローカルに保存します。
- アプリが開いている間、必要に応じてトークンを自動的にリフレッシュします。
ユーザーの DII を UID2 mobile SDK に渡す際、ハッシュ化またはハッシュ化されていない DII を渡すことができます。DII をハッシュ化されていない状態で渡す場合、SDK がハッシュ化します。ハッシュ化された DII を SDK に渡す場合、ハッシュ化する前に正規化する必要があります。詳細は Normalization and Encoding を参照してください。
Format Examples for DII
SDK は、ハッシュ化された DII を UID2 Service に送信する前に暗号化します。
ユーザーごとに、DII のフォーマットが異なる場合でも、任意のフォーマットで generateIdentity
メソッドを呼び出すことができます。DIIのフォーマットはユーザごとに異なる場合がありますが、ユーザーごと送信できる値は 1 つだけです。
以下の例は、UID2 mobile SDK を構成する異なる方法を示し、SDK に渡す DII に必要な要件を示しています:
- Email, Unhashed
- Email, Normalized and Hashed
- Phone Number, Unhashed
- Phone Number, Normalized and Hashed
generateIdentity
メソッドが複数回呼び出される場合、UID2 mobile SDK は最新の構成値を使用します。
- Email, Unhashed
- Email, Normalized and Hashed
- Phone Number, Unhashed
- Phone Number, Normalized and Hashed
以下の例は、UID2 mobile SDK をメールアドレスで構成する方法を示しています。
- Android
- iOS
UID2Manager.getInstance().generateIdentity(
IdentityRequest.Email("test@example.com"),
subscriptionId,
publicKey,
) { result ->
when (result) {
is Error -> ...
is Success -> ...
}
}
struct InvalidEmailError: Error, LocalizedError {
var errorDescription: String = "Invalid email address"
}
Task<Void, Never> {
do {
guard let normalizedEmail = IdentityType.NormalizedEmail(string: "test@example.com") else {
throw InvalidEmailError() // email is invalid and cannot be normalized, handle error
}
try await UID2Manager.shared.generateIdentity(
.email(normalizedEmail),
subscriptionID: subscriptionID,
serverPublicKey: serverPublicKeyString
)
} catch {
// read `error` object for troubleshooting or enable logging to view it in logs
}
}
このシナリオでは:
- パブリッシャーはメールアドレスを正規化またはハッシュ化する必要はありません。
- UID2 mobile SDK は、暗号化されたハッシュを UID2 Service に送信する前にメールアドレスを正規化およびハッシュ化します。
以下の例は、UID2 mobile SDK をハッシュ化されたメールアドレスで構成する方法を示しています。
- Android
- iOS
UID2Manager.getInstance().generateIdentity(
IdentityRequest.EmailHash(
"EObwtHBUqDNZR33LNSMdtt5cafsYFuGmuY4ZLenlue4="
),
subscriptionId,
publicKey,
) { result ->
when (result) {
is Error -> ...
is Success -> ...
}
}
Task<Void, Never> {
do {
try await UID2Manager.shared.generateIdentity(
.emailHash("EObwtHBUqDNZR33LNSMdtt5cafsYFuGmuY4ZLenlue4="),
subscriptionID: subscriptionID,
serverPublicKey: serverPublicKeyString
)
} catch {
// read `error` object for troubleshooting or enable logging to view it in logs
}
}
このシナリオでは:
- パブリッシャーはメールアドレスを正規化およびハッシュ化する責任があります。詳細は Email Address Normalization を参照してください。
- UID2 mobile SDK は、ハッシュ化された DII を UID2 Service に送信する前に暗号化します。
以下の例は、UID2 mobile SDK を電話番号で構成する方法を示しています。
- Android
- iOS
UID2Manager.getInstance().generateIdentity(
IdentityRequest.Phone("+12345678901"),
subscriptionId,
publicKey,
) { result ->
when (result) {
is Error -> ...
is Success -> ...
}
}
struct InvalidPhoneError: Error, LocalizedError {
var errorDescription: String = "Invalid phone number"
}
Task<Void, Never> {
do {
guard let normalizedPhone = IdentityType.NormalizedPhone(normalized: "+12345678901") else {
throw InvalidPhoneError() // Phone number is not normalized according to ITU E.164.
}
try await UID2Manager.shared.generateIdentity(
.phone(normalizedPhone),
subscriptionID: subscriptionID,
serverPublicKey: serverPublicKeyString
)
} catch {
// read `error` object for troubleshooting or enable logging to view it in logs
}
}
このシナリオでは:
- パブリッシャーは電話番号を正規化する責任があります。詳細は Phone Number Normalization を参照してください。
- UID2 mobile SDK は、ハッシュ化された電話番号を UID2 Service に送信する前に暗号化します。
以下の例は、UID2 mobile SDK をハッシュ化された電話番号で構成する方法を示しています。
- Android
- iOS
UID2Manager.getInstance().generateIdentity(
IdentityRequest.PhoneHash(
"EObwtHBUqDNZR33LNSMdtt5cafsYFuGmuY4ZLenlue4="
),
subscriptionId,
publicKey,
) { result ->
when (result) {
is Error -> ...
is Success -> ...
}
}
Task<Void, Never> {
do {
try await UID2Manager.shared.generateIdentity(
.phoneHash("EObwtHBUqDNZR33LNSMdtt5cafsYFuGmuY4ZLenlue4="),
subscriptionID: subscriptionID,
serverPublicKey: serverPublicKeyString
)
} catch {
// read `error` object for troubleshooting or enable logging to view it in logs
}
}
このシナリオでは:
- パブリッシャーは電話番号を正規化 およびハッシュ化する責任があります。詳細は Phone Number Normalization を参照してください。
- UID2 mobile SDK は、ハッシュ化された DII を UID2 Service に送信する前に暗号化します。
Token Storage and Refresh
Format Examples for DII に記載されている適用可能なメソッドを呼び出した後、identity が生成され、ローカルファイルストレージに保存されます。UID2 mobile SDK は定期的に UID2 Token をリフレッシュします。
ローカルファイルストレージに保存されているファイルの形式、またはファイル名自体が予告なく変更される可能性があります。ファイルを直接読み取ったり更新したりしないようにしてください。