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

このガイドは、独自の認証システムをお持ちの方を対象としています。ここでは、既存の認証システムと連携するように、AdaptyでユーザープロファイルをAdaptyで管理する方法について説明します。

ユーザーの購入履歴をどのように管理するかは、アプリの認証モデルによって異なります。

主要な概念

  • プロファイルはSDKが動作するために必要なエンティティです。Adaptyが自動的に作成します。
  • 匿名(カスタマーユーザーIDなし)または識別済み(カスタマーユーザーIDあり)のどちらかになります。
  • カスタマーユーザーIDを提供することで、Adaptyのプロファイルと内部の認証システムとを相互参照できます。

匿名ユーザーと識別済みユーザーの違いは次のとおりです。

匿名ユーザー識別済みユーザー
購入管理ストアレベルの購入復元カスタマーユーザーIDを通じてデバイス間で購入履歴を維持
プロファイル管理再インストールのたびに新しいプロファイルを作成セッションとデバイスをまたいで同一プロファイルを使用
データの永続性匿名ユーザーのデータはアプリのインストールに紐付けられる識別済みユーザーのデータはアプリのインストールをまたいで保持される

匿名ユーザー

バックエンド認証がない場合、アプリのコードで認証を処理する必要はありません

  1. アプリの初回起動時にSDKがアクティベートされると、Adaptyはユーザーの新しいプロファイルを作成します
  2. ユーザーがアプリ内で何かを購入すると、その購入はユーザーのAdaptyプロファイルおよびストアアカウントに関連付けられます
  3. ユーザーがアプリを再インストールしたり、新しいデバイスにインストールしたりすると、Adaptyはアクティベート時に新しい匿名プロファイルを作成します
  4. ユーザーが以前にアプリで購入している場合、SDKのアクティベート時にデフォルトで購入がApp Storeから自動的に同期されます。

匿名ユーザーの場合、インストールのたびに新しいプロファイルが作成されますが、Adaptyのアナリティクスで新規インストールとみなす基準を設定できるため、問題ありません。

匿名ユーザーの場合、インストール数はデバイスIDでカウントする必要があります。この場合、再インストールを含め、デバイスへのアプリインストールがそれぞれ1回のインストールとしてカウントされます。

バックアップからの復元は再インストールとは異なる動作をします。デフォルトでは、ユーザーがバックアップから復元した場合、SDKはキャッシュされたデータを保持し、新しいプロファイルは作成しません。この動作はwithAppleClearDataOnBackup設定で変更できます。詳細を確認する

識別済みユーザー

ユーザーをアプリ内で識別するには2つの方法があります。

  • ログイン/サインアップ時: アプリ起動後にユーザーがサインインする場合、認証時にidentify()をカスタマーユーザーIDとともに呼び出します。

  • SDKアクティベーション時: アプリ起動時にすでにカスタマーユーザーIDが保存されている場合は、activate()の呼び出し時にそれを渡します。

デフォルトでは、Adaptyが現在別のカスタマーユーザーIDに関連付けられているカスタマーユーザーIDからの購入を受け取った場合、アクセスレベルは共有されるため、両方のプロファイルが有料アクセスを持つことになります。この設定を変更して、有料アクセスを一方のプロファイルから他方に移行したり、共有を完全に無効にしたりすることができます。詳細はこちらの記事をご覧ください。

identify-diagram.webp

ログイン/サインアップ時

アプリ起動後にユーザーを識別する場合(たとえば、アプリへのログインやサインアップ後など)、identifyメソッドを使用してカスタマーユーザーIDを設定します。

  • このカスタマーユーザーIDを以前に使用したことがない場合、Adaptyは自動的に現在のプロファイルにリンクします。
  • このカスタマーユーザーIDでユーザーを以前に識別したことがある場合、AdaptyはそのカスタマーユーザーIDに関連付けられたプロファイルを使用するよう切り替えます。

カスタマーユーザーIDは各ユーザーで一意である必要があります。パラメータの値をハードコードすると、すべてのユーザーが同一人物とみなされます。

他のSDKメソッドを呼び出す前に、identifyの完了(onSuccessコールバック)を待ってください。同時に呼び出すと、匿名プロファイルに処理が行われる可能性があります。Kotlin Multiplatform SDKでの呼び出し順序を参照してください。

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

SDKアクティベーション時

SDKをアクティベートする際にすでにカスタマーユーザーIDが分かっている場合、identifyを別途呼び出す代わりにactivateメソッドで渡すことができます。

カスタマーユーザーIDが分かっているにもかかわらず、アクティベーション後にのみ設定した場合、アクティベーション時にAdaptyが新しい匿名プロファイルを作成し、identifyを呼び出した後にのみ既存のプロファイルに切り替わることになります。

既存のカスタマーユーザーID(以前に使用したもの)でも新しいものでも渡すことができます。新しいものを渡した場合、アクティベーション時に作成された新しいプロファイルが自動的にそのカスタマーユーザーIDにリンクされます。

デフォルトでは、匿名プロファイルの作成はアナリティクスのダッシュボードに影響しません。インストール数はデバイスIDに基づいてカウントされるためです。

デバイスIDは、デバイス上のストアからのアプリの単一のインストールを表し、アプリが再インストールされた場合にのみ再生成されます。
初回インストールか再インストールか、または既存のカスタマーユーザーIDが使用されているかどうかには依存しません。

プロファイルの作成(SDKのアクティベーション時またはログアウト時)、ログイン、またはアプリを再インストールせずにアップグレードしても、追加のインストールイベントは生成されません。

デバイスではなくユニークユーザーに基づいてインストール数をカウントしたい場合は、App settingsに移動してInstalls definition for analyticsを設定してください。

AdaptyConfig.Builder("PUBLIC_SDK_KEY")
    .withCustomerUserId("user123") // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
    .build()

ユーザーのログアウト

ユーザーのログアウトボタンがある場合は、logoutメソッドを使用します。

ユーザーをログアウトすると、そのユーザーのために新しい匿名プロファイルが作成されます。

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

ユーザーをアプリに再度ログインさせるには、identifyメソッドを使用します。

ログインなしでの購入を許可する

ユーザーがアプリへのログイン前後の両方で購入できる場合、ログイン後もアクセスが維持されるように設定する必要があります。

  1. ログアウト状態のユーザーが購入すると、Adaptyはその購入を匿名プロファイルIDに紐付けます。
  2. ユーザーがアカウントにログインすると、Adaptyは識別済みプロファイルを使用するよう切り替わります。
    • 新しいカスタマーユーザーIDの場合(たとえば、登録前に購入が行われた場合)、Adaptyは現在のプロファイルにカスタマーユーザーIDを割り当てるため、すべての購入履歴が維持されます。
    • 既存のカスタマーユーザーIDの場合(カスタマーユーザーIDがすでにプロファイルにリンクされている場合)、プロファイルの切り替え後に実際のアクセスレベルを取得する必要があります。識別後すぐにgetProfileを呼び出すか、プロファイルの更新をリッスンすることでデータが自動的に同期されます。

次のステップ

おめでとうございます!アプリにアプリ内課金のロジックが実装できました!アプリの収益化がうまくいくことを願っています!

Adaptyをさらに活用するために、以下のトピックも確認してください。

  • テスト:すべてが期待どおりに動作することを確認する
  • インテグレーション:マーケティングアトリビューションや分析サービスとわずか1行のコードで連携する
  • カスタムプロファイル属性の設定:ユーザープロファイルにカスタム属性を追加してセグメントを作成し、A/Bテストを実施したり、ユーザーに応じて異なるペイウォールを表示したりする