くらげになりたい。

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

RevenueCat入門 その12 | 購入を復元する

前回の続き。購入の復元の仕方(*´ω`*)

Restoring Purchases

購入の復元は、ユーザがストアアカウントから、
以前購入したアプリ内購入を最アクティブ化する機能。

購入復元の機能がないと、審査でリジェクトされるので必須

また、ストアアカウント≠ログインアカウントなので、
いろいろ考慮が必要。。

復元処理の呼び出し

処理自体は、restorePurchases()を呼び出せばOK
ただし、自動で行うのではなく、「復元ボタン」などを用意すべき

try {
  CustomerInfo customerInfo = await Purchases.restorePurchases();
  // ... check restored purchaserInfo to see if entitlement is now active
} on PlatformException catch (e) {
  // Error restoring purchases
}

もし自動で行いたい場合は、syncPurchases()を使うよう。
こっちだと、OSレベルのログインプロンプト(sign-in prompts)が表示されないらしい。

Transferring purchases seen on multiple App User IDs

複数のApp User ID での購入の転送

あるApp User IDが、別のApp User IDが持つトランザクションを復元しようとした場合、
どのように扱うかを、RevenueCat管理画面の
「Project Settings → General」から設定できる。

ここで設定について、以下の注意点がある。

  • Project内にあるすべてのAppに影響する
  • 復元だけでなく、購入の場合でも同じ振る舞いをする
  • 非匿名IDにのみ適用される。匿名IDの場合は、aliasになる

Transfer to new App User ID

デフォルトの動作。復元したユーザに転送する

  • 復元を実行する顧客は、購入した商品すべてにアクセスできる。
  • アクセスできるのは1度に1人のみ
    • UserAが購入し、
    • UserBが同じデバイスで復元すると、
    • UserBのみがアクセスでき、UserAのサブスクが取り消される
  • 非匿名IDで復元し、匿名IDのレシートの場合、
    非匿名IDと匿名IDは、同じ顧客として扱われる(alias)
  • 匿名IDで復元し、非匿名IDのレシートの場合、
    特定の復元動作を実行し、匿名IDに転送する
  • 匿名IDで復元し、匿名IDのレシートの場合、
    2つの匿名IDは、同じ顧客として扱われる(alias)
Google Play on Android

プラットフォームの制限により、購入がすでに別のApp User IDと紐づいている場合、
configure(初期化)を呼び出すと、購入はすぐに転送される。

そのため、ログインをしていなくても、転送されてしまうことがあるため、
適切なタイミングで、初期化(configure)をおこなう必要がある。

Transfer if there are no active subscriptions

有効なサブスクがないときのみ、転送

特定のApp User IDに紐づける厳格なロジックがあるが、
あとで新しいApp User IDを再開するときに便利
(解約後に、別のIDで利用を再開するときなど)

iOSでは、特定のApple IDに紐づく購入がレシートに含まれるため、
Keep with original App User IDを選択していた場合、
ストアで購入できても、RevenueCatは前のIDと関連付けられない。 (同じAppleIDのレシートに記載されているため、アクセスできない)

これは、有効な定期購入のみが対象であり、
非定期購入は転送されることに注意が必要。

Keep with original App User ID

要注意な設定

新規の購入や復元をした場合、 レシートとログイン中のApp User IDが異なると、
エラーを返す設定。

  • 購入前にアカウント作成が必要
    • 匿名IDでは購入させない
  • 同じアカウントでのみ復元可能

としたい場合にはよいっぽい。

Share between App User IDs (legacy)

昔の設定。新しく作ったProjectだと表示されなかったので、略

Example usage

実際の設定例。

  • ログイン機能がなく、匿名IDのみの場合
    • Transfer to new App User ID
    • 再インストール後も復元できるようにしておく
  • ログインは任意で、アカウントなしで購入できる場合
    • Transfer to new App User ID
    • アカウントがない場合も復元できるようにしておく
  • 購入はログイン後のみの場合
    • Transfer to new App User ID
    • 以前のアカウント情報を忘れた場合でも復元できるように
  • 購入はログイン後のみかつ、購入者のみ利用を許可する場合
    • Keep with original App User ID
    • 転送されないようにする
    • アカウントの復旧プロセスを案内できるように準備が必要

Syncing purchases without user interaction

ユーザ操作無しで復元するときは、syncPurchasesを使う。
基本的に、既存のサブスク処理からRevenueCatに移行するとき向け
意図しない、転送やalias化が発生する場合があるので注意

Restoring Purchases for Consumables and Non-renewing Subscriptions

非定期購読や自動更新ではない定期購読の復元

  • 非匿名IDの場合のみ、復元を行うことができる
  • 非匿名IDでログインすると、RevenueCatが提供してくれる

匿名ID(Anonymous App User Id)やlink/aliasの話は、以下のあたりに


以上!! 復元が絡むとかなり複雑だ。。。(*´ω`*)