くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

RevenueCat入門 その8 | 顧客IDの扱い方

前回の続き。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まわり、奥が深いな。。
ちゃんと考えないと事故が起こりそうだ。。(*´ω`*)