Flutter SDKでのユーザー識別

このガイドは、独自の認証システムをお持ちの方向けです。ここでは、Adaptyのユーザープロファイルを既存の認証システムに合わせて管理する方法について説明します。

ユーザーの購入管理方法は、アプリの認証モデルによって異なります:

主要な概念

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

匿名ユーザーと識別済みユーザーの違いは以下の通りです:

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

匿名ユーザー

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

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

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

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

識別済みユーザー

ユーザーを識別するには2つの方法があります:

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

  • SDK有効化時: アプリ起動時にすでにカスタマーユーザーIDが保存されている場合は、activate()の呼び出し時に送信します。

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

identify-diagram.webp

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

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

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

カスタマーユーザーIDは各ユーザーで一意でなければなりません。パラメーターの値をハードコードすると、すべてのユーザーが同一人物として扱われます。

他のSDKメソッドを呼び出す前に、必ずidentifyawaitしてください。並列呼び出しをすると#3006 profileWasChangedが発生するか、匿名プロファイルに対して処理が行われます。詳しくはFlutter SDKの呼び出し順序を参照してください。

try {
  await Adapty().identify(customerUserId); // Unique for each user
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
}

SDK有効化時

SDKを有効化する時点でカスタマーユーザーIDがわかっている場合は、identifyを別途呼び出す代わりに、activateメソッドに渡すことができます。

カスタマーユーザーIDがわかっていても有効化後に設定する場合、有効化時にAdaptyが新しい匿名プロファイルを作成し、identifyを呼び出した後にのみ既存のプロファイルへ切り替わります。

既存のカスタマーユーザーID(以前に使用したもの)でも新しいものでも渡すことができます。新しいIDを渡すと、有効化時に作成された新しいプロファイルがそのカスタマーユーザーIDに自動的に紐づけられます。

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

デバイスIDはストアからデバイスへのアプリの1回のインストールを表し、アプリを再インストールした場合にのみ再生成されます。
初回インストールか再インストールかに関係なく、また既存のカスタマーユーザーIDを使用するかどうかにも依存しません。

プロファイルの作成(SDK有効化時またはログアウト時)、ログイン、またはアプリの再インストールなしのアップグレードでは、追加のインストールイベントは生成されません。

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

   try {
       await Adapty().activate(
           configuration: AdaptyConfiguration(apiKey: 'YOUR_API_KEY')
             ..withCustomerUserId(YOUR_CUSTOMER_USER_ID) // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
       );
   } catch (e) {
       // handle the error
   }

ユーザーのログアウト

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

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

try {
  await Adapty().logout();
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle unknown error
}

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

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

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

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

次のステップ

おめでとうございます!アプリにアプリ内決済のロジックを実装できました!アプリのマネタイズが成功することを願っています!

Adaptyをさらに活用するために、以下のトピックを探索してみてください:

  • テスト:すべてが期待通りに動作することを確認する
  • オンボーディング:オンボーディングでユーザーを引き付けてリテンションを向上させる
  • インテグレーション:マーケティングアトリビューションや分析サービスとワンラインで連携する
  • カスタムプロファイル属性の設定:ユーザープロファイルにカスタム属性を追加してセグメントを作成し、A/Bテストの実施や異なるユーザーへの異なるペイウォール表示を可能にする