Unity SDKでユーザーを識別する
このガイドは、独自の認証システムをお持ちの方向けです。ここでは、既存の認証システムと連携するために、Adaptyのユーザープロファイルをどのように扱うかを説明します。
ユーザーの購入管理の方法は、アプリの認証モデルによって異なります。
- アプリがバックエンド認証を使用せず、ユーザーデータを保存しない場合は、匿名ユーザーのセクションをご覧ください。
- アプリにバックエンド認証がある(または予定している)場合は、識別済みユーザーのセクションをご覧ください。
主要な概念:
- プロファイルはSDKが動作するために必要なエンティティです。Adaptyが自動的に作成します。
- 匿名(カスタマーユーザーIDなし)または識別済み(カスタマーユーザーIDあり)のいずれかになります。
- カスタマーユーザーIDを提供することで、Adaptyのプロファイルと内部認証システムを相互参照できます。
匿名ユーザーと識別済みユーザーの違いは次のとおりです。
| 匿名ユーザー | 識別済みユーザー | |
|---|---|---|
| 購入管理 | ストアレベルの購入復元 | カスタマーユーザーIDを通じてデバイス間で購入履歴を維持 |
| プロファイル管理 | 再インストールのたびに新しいプロファイルが作成される | セッションやデバイスをまたいで同じプロファイルを使用 |
| データの永続性 | 匿名ユーザーのデータはアプリのインストールに紐付けられる | 識別済みユーザーのデータはアプリのインストールをまたいで保持される |
匿名ユーザー
バックエンド認証を使用しない場合、アプリコードで認証を処理する必要はありません。
- アプリの初回起動時にSDKがアクティベートされると、Adaptyはそのユーザーの新しいプロファイルを作成します。
- ユーザーがアプリ内で何かを購入すると、その購入はAdaptyプロファイルとストアアカウントに関連付けられます。
- ユーザーがアプリを再インストールしたり、新しいデバイスにインストールしたりすると、Adaptyはアクティベーション時に新しい匿名プロファイルを作成します。
- ユーザーが以前にアプリで購入していた場合、デフォルトではSDKのアクティベーション時にApp Storeから購入履歴が自動的に同期されます。
匿名ユーザーの場合、インストールのたびに新しいプロファイルが作成されますが、Adaptyのアナリティクスでは新規インストールとして見なす基準を設定できるため、問題はありません。
匿名ユーザーの場合、デバイスIDでインストールをカウントする必要があります。この場合、再インストールを含む、デバイスへのアプリインストールのたびにインストールとしてカウントされます。
識別済みユーザー
アプリでユーザーを識別するには、2つの方法があります。
-
ログイン/サインアップ時: アプリ起動後にユーザーがサインインする場合、認証時に
identify()をカスタマーユーザーIDとともに呼び出します。 -
SDKアクティベーション時: アプリ起動時にすでにカスタマーユーザーIDが保存されている場合は、
activate()の呼び出し時に渡します。
デフォルトでは、Adaptyが現在別のカスタマーユーザーIDに関連付けられているカスタマーユーザーIDからの購入を受け取った場合、アクセスレベルは共有されるため、両方のプロファイルが有料アクセスを持ちます。この設定を変更して、有料アクセスを一方のプロファイルから他方に移譲したり、共有を完全に無効にしたりすることができます。詳細はこちらの記事をご覧ください。
ログイン/サインアップ時
アプリ起動後にユーザーを識別する場合(例:アプリへのログイン後やサインアップ後)、identifyメソッドを使用してカスタマーユーザーIDを設定します。
- このカスタマーユーザーIDを以前に使用したことがない場合、Adaptyは自動的に現在のプロファイルに紐付けます。
- このカスタマーユーザーIDでユーザーを以前に識別したことがある場合、AdaptyはそのカスタマーユーザーIDに関連付けられたプロファイルに切り替えて処理を行います。
カスタマーユーザーIDは各ユーザーで一意である必要があります。パラメータ値をハードコードすると、すべてのユーザーが同一人物として扱われます。
他のSDKメソッドを呼び出す前に、Identifyの完了コールバックを待ってください。同時に呼び出すと#3006 profileWasChangedが発生するか、匿名プロファイルに対して処理が行われます。詳細はUnity SDKの呼び出し順序をご覧ください。
Adapty.Identify("YOUR_USER_ID", (error) => { // Unique for each user
if(error == null) {
// successful identify
}
});
SDKアクティベーション時
SDKをアクティベートする際にすでにカスタマーユーザーIDがわかっている場合は、identifyを別途呼び出す代わりに、activateメソッドに渡すことができます。
カスタマーユーザーIDがわかっているのにアクティベーション後にのみ設定する場合、アクティベーション時にAdaptyが新しい匿名プロファイルを作成し、identifyを呼び出した後にのみ既存のプロファイルに切り替わります。
既存のカスタマーユーザーID(以前に使用したもの)または新しいものを渡すことができます。新しいものを渡すと、アクティベーション時に作成された新しいプロファイルが自動的にそのカスタマーユーザーIDに紐付けられます。
デフォルトでは、匿名プロファイルの作成はアナリティクスダッシュボードに影響しません。インストールはデバイスIDに基づいてカウントされるためです。
デバイスIDはデバイスへのアプリのストアからの単一インストールを表し、アプリの再インストール後にのみ再生成されます。
初回インストールか再インストールか、または既存のカスタマーユーザーIDが使用されているかどうかには依存しません。
プロファイルの作成(SDKのアクティベーション時またはログアウト時)、ログイン、またはアプリの再インストールなしのアップグレードは、追加のインストールイベントを生成しません。
デバイスではなく一意のユーザーに基づいてインストールをカウントしたい場合は、App settingsに移動してInstalls definition for analyticsを設定してください。
using UnityEngine;
using AdaptySDK;
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID"); // Customer user IDs must be unique for each user. If you hardcode the parameter value, all users will be considered as one.
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
ユーザーをログアウトする
ユーザーをログアウトさせるボタンがある場合は、logoutメソッドを使用します。
ユーザーをログアウトすると、そのユーザーの新しい匿名プロファイルが作成されます。
Adapty.Logout((error) => {
if(error == null) {
// successful logout
}
});
ユーザーをアプリに再度ログインさせるには、identifyメソッドを使用します。
ログインなしでの購入を許可する
ユーザーがアプリへのログイン前後の両方で購入できる場合、ログイン後もアクセスが維持されるよう対応が必要です。
- ログアウト状態のユーザーが購入すると、AdaptyはそれをそのユーザーのアノニマスプロファイルIDに紐付けます。
- ユーザーがアカウントにログインすると、Adaptyはその識別済みプロファイルへの処理に切り替えます。
- 新しいカスタマーユーザーIDの場合(例:登録前に購入が行われた場合)、Adaptyはカスタマーユーザーをを現在のプロファイルに割り当てるため、すべての購入履歴が維持されます。
- 既存のカスタマーユーザーIDの場合(カスタマーユーザーIDがすでにプロファイルに紐付けられている場合)、プロファイルの切り替え後に実際のアクセスレベルを取得する必要があります。識別後すぐに
getProfileを呼び出すか、プロファイルの更新をリッスンしてデータを自動的に同期させることができます。
次のステップ
おめでとうございます!アプリにアプリ内課金のロジックを実装できました!アプリの収益化がうまくいくことを願っています!
Adaptyをさらに活用するために、以下のトピックも探ってみてください。
- テスト: すべてが期待どおりに動作することを確認する
- オンボーディング: オンボーディングでユーザーを引き込み、継続率を高める
- インテグレーション: マーケティングアトリビューションや分析サービスをたった1行のコードで統合する
- カスタムプロファイル属性を設定する: ユーザープロファイルにカスタム属性を追加してセグメントを作成し、A/B テストを実施したり、異なるユーザーに異なるペイウォールを表示したりする