サブスク登録済みのひとつのデバイス(ひとつのApple ID)で異なるユーザーがログインしたとき、サブスクとユーザーの関連付けをどのようにおこなうべきか?
サブスクのレシート情報にはユニークなユーザーIDは含まれていないため、サブスクとユーザーIDの紐付けってどうやるのが正解なのかわからない。
例えば、サブスク登録済みのデバイスで、以下の挙動をおこなう。
- ユーザーAがログイン
- ユーザーBがログイン
StoreKitを使って最後のレシート情報とユーザーを紐付けると、AとBそれぞれにサブスク課金フラグが立ってしまう。
サブスク登録済みのひとつのデバイス(ひとつのApple ID)で異なるユーザーがログインしたとき、サブスクとユーザーの関連付けをどのようにおこなうべきか?
RevenueCat などサブスク管理サービスはたくさんあるが、どのサービスも SDK.setUserID("USER_ID")
的なメソッドを読んでユーザー情報を登録している。この方法だとAとBそれぞれにサブスク課金フラグが立ってしまいそうである。
RevenueCatの場合は、AとBを同一ユーザーと見做してエイリアスを作成すると書かれている。
If two different App User IDs restore transactions from the same underlying store account (Apple, Google, or Amazon account) RevenueCat may attempt to create an alias between the two App User IDs and count them as the same user going forward. See our guide on Restoring Purchases for more information on the different configurable restore behaviors.
↑の話は古い。現在のRevenueCatでは同一レシート情報が異なるユーザーから送られてきたときの挙動を3つから選択することができるようだ。
たとえば、サブスク登録済みデバイスで ユーザーA から ユーザーB の順でログインしたと仮定する。
- Transfer Purchases (Default):後勝ち。Bのログイン後、Aはサブスクへのアクセス権を失う
- Block Restores:先勝ち。Bでログインしてもアクセス権は得られない (Aがアクセス権を保持したまま)
- Alias:両勝ち。RevenueCatはAとBは同一ユーザーと見做す。両方ともアクセス権を得る
自社でサブスク管理処理を実装する際には、サブスク実装界隈(?)のスタンダードである RevenueCat が後勝ちをデフォルトとして採用していることから、それにならって後勝ちで実装すればよいことがわかった。
ただ RevenueCat であれば、月間 120万円までは 0円で使えるので、個人開発アプリや小中規模のアプリであれば十分とも言える。Starterプランでも 月間$1,000 ごとに $8 なので十分安いと思う。