Kotlin Multiplatform SDK でユーザーを識別する

Adapty はすべてのユーザーに対して内部プロファイル ID を作成します。ただし、独自の認証システムを持っている場合は、独自の Customer User ID を設定する必要があります。Profiles セクションで Customer User ID によってユーザーを検索したり、すべてのインテグレーションに送信されるサーバーサイド API で使用することができます。

設定時に Customer User ID を設定する

設定時にユーザー ID がある場合は、.activate() メソッドの customerUserId パラメータとして渡すだけです:


Adapty.activate(
    AdaptyConfig.Builder("PUBLIC_SDK_KEY")
        .withCustomerUserId("YOUR_USER_ID")
        .build()
).onSuccess {
    // successful activation
}.onError { error ->
    // handle the error
    }
}

Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を見てみませんか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを実演しているサンプルアプリをご覧ください。

設定後に Customer User ID を設定する

SDK の設定時にユーザー ID がない場合は、後から .identify() メソッドを使っていつでも設定できます。このメソッドが最もよく使われるのは、登録後やログイン後に匿名ユーザーから認証済みユーザーへ切り替わるタイミングです。


Adapty.identify("YOUR_USER_ID").onSuccess {
    // successful identify
}.onError { error ->
    // handle the error
}

リクエストパラメータ:

  • Customer User ID(必須): 文字列のユーザー識別子。

重要なユーザーデータの再送信

ユーザーが再度アカウントにログインする場合など、Adapty のサーバーにすでにそのユーザーの情報が存在していることがあります。このような場合、Adapty SDK は自動的に新しいユーザーとして動作を切り替えます。カスタム属性やサードパーティネットワークからのアトリビューションなど、匿名ユーザーに対してデータを渡していた場合は、識別されたユーザーに対してそのデータを再送信する必要があります。

また、新しいユーザーのデータが異なる可能性があるため、ユーザーを識別した後はすべてのペイウォールとプロダクトを再取得する必要があることにも注意してください。

ログアウトとログイン

.logout() メソッドを呼び出すことで、いつでもユーザーをログアウトさせることができます:


Adapty.logout().onSuccess {
    // successful logout
}.onError { error ->
    // handle the error
}

その後、.identify() メソッドを使ってユーザーをログインさせることができます。

appAccountToken を割り当てる(iOS)

iosAppAccountToken は、App Store のトランザクションを内部ユーザー ID に紐付けるための UUID です。 StoreKit はすべてのトランザクションにこのトークンを関連付けるため、バックエンドで App Store のデータをユーザーと照合することができます。

ユーザーごとに安定した UUID を生成し、同じアカウントに対してデバイスをまたいで再利用してください。 これにより、購入や App Store の通知が正しく紐付けられたままになります。

トークンは、SDK のアクティベーション時またはユーザーの識別時の 2 つの方法で設定できます。

iosAppAccountToken は必ず customerUserId と一緒に渡す必要があります。 トークンのみを渡した場合、トランザクションに含まれません。


// During configuration:
Adapty.activate(
    AdaptyConfig.Builder("PUBLIC_SDK_KEY")
        .withCustomerUserId(
            id = "YOUR_USER_ID",
            iosAppAccountToken = "YOUR_IOS_APP_ACCOUNT_TOKEN"
        )
        .build()
).onSuccess {
    // successful activation
}.onError { error ->
    // handle the error
}

// Or when identifying users
Adapty.identify(
    customerUserId = "YOUR_USER_ID",
    iosAppAccountToken = "YOUR_IOS_APP_ACCOUNT_TOKEN"
).onSuccess {
    // successful identify
}.onError { error ->
    // handle the error
}

難読化アカウント ID を設定する(Android)

Google Play では、ユーザーのプライバシーとセキュリティを強化するために、特定のユースケースで難読化アカウント ID が必要です。これらの ID は、ユーザー情報を匿名に保ちながら Google Play が購入を識別するのに役立ち、不正防止やアナリティクスにおいて特に重要です。

アプリが機密性の高いユーザーデータを扱っている場合や、特定のプライバシー規制への準拠が求められる場合に、これらの ID を設定する必要があるかもしれません。難読化 ID により、Google Play は実際のユーザー識別子を公開せずに購入を追跡できます。

androidObfuscatedAccountId は必ず customerUserId と一緒に渡す必要があります。 難読化アカウント ID のみを渡した場合、トランザクションに含まれません。


// During configuration:
Adapty.activate(
    AdaptyConfig.Builder("PUBLIC_SDK_KEY")
        .withCustomerUserId(
            id = "YOUR_USER_ID",
            androidObfuscatedAccountId = "YOUR_OBFUSCATED_ACCOUNT_ID"
        )
        .build()
).onSuccess {
    // successful activation
}.onError { error ->
    // handle the error
}

// Or when identifying users
Adapty.identify(
    customerUserId = "YOUR_USER_ID",
    androidObfuscatedAccountId = "YOUR_OBFUSCATED_ACCOUNT_ID"
).onSuccess {
    // successful identify
}.onError { error ->
    // handle the error
}

デバイスをまたいでユーザーを検出する

SDKが有効化されると、StoreKit(iOS)またはGoogle Play Billing(Android)からユーザーの既存のエンタイトルメントを自動的に読み取り、Adaptyバックエンドと同期します。有効なサブスクリプションは、アプリがrestorePurchasesを呼び出すことなく、Adaptyプロファイルに表示されます。

自動では行われないのは、新しいデバイスのプロファイルが元のデバイスと同じユーザーのものであることの認識です。AdaptyはCustomer User IDでプロファイルを照合するため、同一性の継続性はCUIDとして何を使用するかによって異なります。

デバイス間でAdaptyが検出できること

あなたの設定Adaptyが検出すること必要な対応
Customer User ID = device_id(アプリのログインなし)新しいデバイスは異なるCUIDを取得するため、異なるプロファイルが作成されます。サブスクリプションはAccess level updatedイベントを通じて新しいプロファイルに同期されますが、subscription_startedは発火しません。新しいプロファイルは元の購入の継承者として扱われます。subscription_startedに基づくアナリティクスは、リターニングユーザーをカウント不足します。リターニングユーザーが既存のプロファイルをデバイス間で照合できるよう、安定したアカウントIDをCustomer User IDとして使用してください。
Customer User ID = 安定したアカウントID(すべてのデバイスでログイン)SDKはactivate()でサブスクリプションを自動同期し、identify()がCUIDで既存のプロファイルを照合します。追加の設定は不要です。IDとサブスクリプションの両方が自動的に解決されます。
Apple Family Sharing の継承者ファミリーメンバーはAccess level updatedイベントのみを通じてサブスクリプションを受け取ります。subscription_startedは発火しません。Access level updatedをリッスンしてください。完全なイベントマトリクスはApple Family Sharingを参照してください。
同じApple/Googleアカウント、異なるアプリ内ユーザー最初に購入を記録したプロファイルが親になります。その後のプロファイルは継承者チェーンを通じてサブスクリプションを確認し、Access level updatedイベントが1回発生します。ログインを必須にし、あなたのモデルに合った共有モードを選択してください。

新しいデバイスでの購入の復元

ペイウォールにユーザーが操作できる「購入を復元」ボタンを設置してください。Apple App Review(ガイドライン3.1.1)で必須とされており、自動同期がエッジケースを見逃した場合のフォールバックとして機能します。このボタンはSDKのrestorePurchasesを呼び出す必要があります。

初回起動時にプログラムでrestorePurchasesを呼び出すことは、通常の使用では必要ありません。SDKはすでにactivate()で同等の処理を実行しています。プログラムによる呼び出しは、activate()完了後にアクセスが欠落している場合のデバッグなど、強制的に新しいレシートチェックを行う場合にのみ使用してください。