前回の続き。App User ID(顧客ID/ユーザID)周りの話
Identifying Customers
RevenueCatは複数のストア/プラットフォームで、
共通のサブスクリプションの状態を提供してくれる。
そのため、ユーザID/顧客IDをRevenueCatで管理していて、
そのIDにサブスクリプションの状態が紐づいている。
このRevenueCatのユーザID/顧客IDがApp User Id
What is a customer in RevenueCat?
RevenueCat上での顧客とな何か。
RevenueCatでは、RevenueCatを利用して購入する人を指す。
すべての顧客はApp User Id
を持っていて、
それに紐づく一意のCustomerInfo
(顧客情報)を持っている。
App User Id
を指定/設定しないと、RevenueCatが自動生成する。
単一のApp User Id
もできるし、
App User Id
と自動生成したIDを組み合わせることもある。
組み合わせて使う場合、ログインや復元などを行うときに、
顧客を統合/マージする必要がある。
(2つのIDを同じ顧客として扱うalias機能)
匿名IDを使いたくない場合は、以下を見るといい
Anonymous App User IDs
App User Id
を指定しない場合に、RevenueCatが自動生成するID
生成したApp User Id
はデバイスにキャッシュされる。
アプリを削除して、再インストールした場合、再度自動生成される。
SDK v3+の場合は、$RCAnonymousID:
というプレフィックスがつくので、
自動生成かどうかはIDで判断しやすい
Logging In with a Custom App User ID
App User Id
を指定すると以下の場合に便利
- 復元しなくても再インストール時に、課金状況が引き継がれる
- 複数の端末でも、課金状況が引き継がれる
Provide App User ID on configuration
初期化時に、App User Id
を指定する方法
await Purchases.configure( PurchasesConfiguration(<public_sdk_key>) ..appUserID = <my_app_user_id> ); // or final configuration = PurchasesConfiguration(<public_sdk_key>); configuration.appUserID = <my_app_user_id>; await Purchases.configure(configuration);
Provide App User ID after configuration
初期化後に、App User Id
を指定する方法
// Later log in provided user Id LogInResult result = await Purchases.logIn(<my_app_user_id>);
初期化時に自動生成されたAnonymous App User Idと、
.login()
で指定したApp User Idをマージ(alias)するを決定する。
ルールはこんな感じらしい。
- 指定したApp User Idが存在していないか
- まだAnonymousなApp User Idのaliasがない場合
- 今のIDとマージ(alias)される
- それ以外は、指定IDに置き換えられる
現在のID | 指定IDが存在 | 指定IDのalias | マージするかどうか |
---|---|---|---|
Anonymous | No | N/A | Anonymous IDとマージ |
Anonymous | Yes | No | Anonymous IDとマージ |
Anonymous | Yes | Anonymousとalias | マージされない |
Non-anonymous | Any | Any | マージされない |
Logging Out
ログアウトする場合は、logOut()
を呼ぶらしい。
ログアウト後は新しい匿名IDが自動生成される。
匿名IDを使いたくない場合は、以下を見るといい
Logging back in
再ログインは、login()
を使えばOK
Switching accounts
アカウントの切り替えの場合は、login()
を使えばOK
logOut()
を呼ぶ必要はなし。
Sharing Subscriptions Across Apps and Platforms
アプリやストア/プラットフォーム間で、サブスクリプションを共有する。
RevenueCatでは、同じProject内で、
課金アイテム(Subscription)やApp User Idを共有する。
違うアプリやプラットフォームでも、同じProject/App User Idを利用すると、
購入した状態や顧客情報は引き継がれる。
自動生成される匿名IDだと、App User Idが変わってしまうので、
独自の認証システムを利用してる場合、匿名IDは使いたくない。
How to only use Custom App User IDs
匿名IDを使わないように気をつける点。
匿名IDは、初期化時とログアウト時に自動生成されるので、
そこをうまく回避するのがよいっぽい。
Only Configure the SDK with a custom App User ID
必ずApp User IDを指定して初期化する。
なので、ログイン前に初期化するのではなく、
はじめてのログイン時に初期化を行う
Do not Logout the User
アプリ上でログアウトしても、logOut()
を呼ばない。
再ログインしたときに、login()
でアカウントを切り替える。
Tips for Setting App User IDs
Tips集
- 推測できるIDにしない
- public APIで課金情報などにアクセスできてしまうので、
- 推測不可能な疑似ランダムIDを利用するのが良い。
- 100文字以下にする
- emailをIDにしない
- GDPRがあるので、emailは非推奨
- (メールアドレスを変更することもあるし)
- IDFA(広告識別子)をIDにしない
- IDFAは簡単にローテーションできてしまう
- 広告追跡が制限されていると一意にならない
- IDをハードコードしない
- 使えない文字列がある
no_user
/null
/none
/guest
など/
を含むIDもNG
以上!! App User IDまわり、奥が深いな。。
ちゃんと考えないと事故が起こりそうだ。。(*´ω`*)