Unity SDKでユーザーを識別する
Adaptyはすべてのユーザーに対して内部プロファイルIDを作成します。ただし、独自の認証システムをお持ちの場合は、Customer User IDを設定することをお勧めします。ProfilesセクションでCustomer User IDによってユーザーを検索したり、すべてのインテグレーションに送信されるサーバーサイドAPIでも使用できます。
設定時にCustomer User IDを設定する
設定時にユーザーIDがある場合は、.activate()メソッドのcustomerUserIdパラメーターとして渡すだけです。
using UnityEngine;
using AdaptySDK;
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID");
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
Adapty SDK がモバイルアプリにどのように統合されているか、実際の例を見てみませんか?ペイウォールの表示、購入処理、その他の基本機能を含む完全なセットアップを実演しているサンプルアプリをご覧ください。
設定後にCustomer User IDを設定する
SDK設定時にユーザーIDがない場合は、.identify()メソッドを使っていつでも後から設定できます。このメソッドが最もよく使われるのは、登録後や認証後、つまりユーザーが匿名ユーザーから認証済みユーザーに切り替わるタイミングです。
Adapty.Identify("YOUR_USER_ID", (error) => {
if(error == null) {
// successful identify
}
});
リクエストパラメーター:
- Customer User ID(必須):文字列のユーザー識別子。
重要なユーザーデータの再送信について
ユーザーが再度ログインした場合など、Adaptyのサーバーにすでにそのユーザーの情報が存在していることがあります。このような場合、Adapty SDKは自動的に新しいユーザーとして切り替わります。カスタム属性やサードパーティネットワークからのアトリビューションなど、匿名ユーザーに対して送信したデータがある場合は、識別されたユーザーに対してそのデータを再送信する必要があります。
また、新しいユーザーのデータが異なる場合があるため、ユーザーを識別した後はすべてのペイウォールとプロダクトを再取得する必要があることにも注意してください。
ログアウトとログイン
.logout()メソッドを呼び出すことで、いつでもユーザーをログアウトできます。
Adapty.Logout((error) => {
if(error == null) {
// successful logout
}
});
その後、.identify()メソッドを使ってユーザーをログインさせることができます。
appAccountTokenを設定する(iOS)
appAccountTokenは、App Storeのトランザクションと内部ユーザーIDを紐づけるためのUUIDです。
StoreKitはこのトークンをすべてのトランザクションに関連付けるため、バックエンドでApp Storeのデータを自社ユーザーと照合できます。
ユーザーごとに安定したUUIDを生成し、デバイスをまたいで同じアカウントに再利用してください。 これにより、購入情報やApp Storeの通知が正しく紐づけられます。
トークンの設定方法は2通りあります。SDK有効化時とユーザー識別時です。
appAccountTokenは必ずcustomerUserIdと一緒に渡してください。
トークンだけを渡しても、トランザクションには含まれません。
using UnityEngine;
using AdaptySDK;
using System;
// During configuration:
var appAccountToken = new Guid("YOUR_APP_ACCOUNT_TOKEN");
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID", appAccountToken);
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
// Or when identifying users
Adapty.Identify("YOUR_USER_ID", appAccountToken, (error) => {
if (error == null) {
// successful identify
}
});
難読化アカウントIDを設定する(Android)
Google Playでは、ユーザーのプライバシーとセキュリティを強化するために、特定のユースケースで難読化アカウントIDが必要です。これらのIDにより、Google Playはユーザー情報を匿名に保ちながら購入を識別できます。これは特に不正防止やアナリティクスにおいて重要です。
アプリが機密性の高いユーザーデータを扱う場合や、特定のプライバシー規制への準拠が求められる場合に、これらのIDを設定する必要が生じることがあります。難読化IDを使用することで、Google Playは実際のユーザー識別子を公開せずに購入を追跡できます。
using UnityEngine;
using AdaptySDK;
// During configuration:
var builder = new AdaptyConfiguration.Builder("YOUR_API_KEY")
.SetCustomerUserId("YOUR_USER_ID", null, "YOUR_OBFUSCATED_ACCOUNT_ID");
Adapty.Activate(builder.Build(), (error) => {
if (error != null) {
// handle the error
return;
}
});
// Or when identifying users
Adapty.Identify("YOUR_USER_ID", null, "YOUR_OBFUSCATED_ACCOUNT_ID", (error) => {
if (error == null) {
// successful identify
}
});
デバイスをまたいでユーザーを検出する
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()完了後にアクセスが欠落している場合のデバッグなど、強制的に新しいレシートチェックを行う場合にのみ使用してください。