RevenueCatからの移行
移行は5つのステップで構成されており、平均所要時間は約2時間です。移行の90%は1営業日以内に完了しています。
- 主要な違いを把握し、Adapty アカウントを作成・準備する (5分);
- RevenueCat SDK の代わりに、お使いのプラットフォーム向け Adapty SDK をインストールする(iOS、Android、React Native、Flutter、Kotlin Multiplatform、Unity)(1時間);
- Apple App Store サーバー通知を Adapty に設定し、オプションで生イベントの転送も設定する (5分);
- アプリのアップデートをテストしてリリースする (30分);
- (オプション)RevenueCat のスケジュールデータエクスポートを使用して、RevenueCat の過去データを CSV 形式でエクスポートする (5分);
- (オプション)Adapty サポートを通じて過去のデータをインポートする (30分)。
サブスクライバーは自動的に移行されます
サブスクリプションを有効化したことのあるすべてのユーザーは、Adapty SDK を組み込んだ新しいバージョンのアプリを開いた瞬間に、自動的に Adapty へ移行されます。サブスクリプションのステータス検証とプレミアムアクセスは自動的に復元されます。
Adapty SDK を組み込んだアプリの新しいバージョンをリリースする前に、リリースチェックリストをご確認ください。
主要な違いを理解し、Adaptyアカウントを作成・準備する
AdaptyとRevenueCatのSDKは設計が似ています。最大の違いはネットワーク使用量とスピードです。Adapty SDKは、必要な情報をリクエスト時にできる限り高速に提供するよう設計されています。たとえば、ペイウォールをリクエストする際、オンボーディングやペイウォールの事前構築に使えるリモートコンフィグがまず返され、その後プロダクトが専用リクエストで取得されます。
名称は少し異なります:
| RevenueCat | Adapty |
|---|---|
| Package | Product |
| Offering | Paywall |
| Paywall | Paywall Builder |
| Entitlement | Access level |
Adaptyにはプレースメントというコンセプトがあります。これはアプリ内でユーザーが購入できる論理的な場所です。ほとんどの場合、プレースメントは1〜2つです:
- オンボーディング(全購入の80%がここで発生するため);
- 全般(オンボーディング後の設定画面やアプリ内で表示)。
Adapty SDKのインストールとRevenueCat SDKの置き換え
各プラットフォーム向けのAdapty SDKをアプリにインストールしてください(iOS、Android、React Native、Flutter、Kotlin Multiplatform、Unity)。
アプリ側でいくつかのSDKメソッドを置き換える必要があります。よく使われる関数とAdapty SDKでの置き換え方法を見ていきましょう。
SDKのアクティベーション
Purchases.configure を Adapty.activate に置き換えてください。
ペイウォール(オファリング)の取得
Purchases.shared.getOfferings を Adapty.getPaywall に置き換えてください。
Adaptyでは、常にプレースメントIDを使ってペイウォールをリクエストします。実際には1〜2個のペイウォールしか取得しないため、SDKの高速化とネットワーク使用量の削減を目的として意図的にこのような設計にしています。
ユーザー(カスタマープロファイル)の取得
Purchases.shared.getCustomerInfo を Adapty.getProfile に置き換えてください。
プロダクトの取得
RevenueCatでは、Purchases.shared.getOfferingsを使い、その後self.offering?.availablePackagesで取得します。
Adaptyでは、まずペイウォールをリクエストして(上記参照)Adaptyのリモートコンフィグにすぐアクセスし、その後Adapty.getPaywallProductsでプロダクトを取得します。
購入する
Purchases.shared.purchase を Adapty.makePurchase に置き換えてください。
アクセスレベル(エンタイトルメント)の確認
カスタマープロファイルを取得し(上記参照)、
customerInfo?.entitlements["premium"]?.isActive == true
を以下に置き換えてください:
profile.accessLevels["premium"]?.isActive == true
購入の復元
Purchases.shared.restorePurchases を Adapty.restorePurchases に置き換えてください。
ユーザーのログイン状態を確認する
Purchases.shared.isAnonymous を if profile.customerUserId == nil に置き換えてください。
ユーザーのログイン
Purchases.shared.logIn を Adapty.identify に置き換えてください。
ユーザーのログアウト
Purchases.shared.logOut を Adapty.logout に置き換えてください。
App Storeのサーバーサイド通知をAdaptyに切り替える
手順はこちらをご覧ください。
アプリの新バージョンをテストしてリリースする
ここまで読んでいるということは、すでに以下の作業が完了しているはずです:
- Adapty ダッシュボードの設定
- Adapty SDKのインストール
- SDKロジックのAdapty関数への置き換え
- App StoreのサーバーサイドサービスをAdaptyに切り替え(オプションでRevenueCatへのrawイベント転送を有効化)
- サンドボックスでの購入テスト
- 新しいアプリのリリース
上記の項目を確認したら、サンドボックスでテスト購入を行い、アプリをリリースしてください。
リリースチェックリストを確認してください。
リストを使って既存のインテグレーションを検証し、アトリビューションやアナリティクスインテグレーションなどの追加機能の設定も行いましょう。
(オプション) RevenueCat の履歴データを CSV 形式でエクスポートする
履歴データのインポートを急がないでください
SDK をリリースしてから少なくとも1週間は待つことをおすすめします。その期間中に、SDK から購入価格に関するすべての情報を取得できるため、インポートするデータの精度が上がります。
RevenueCat の公式ドキュメントの手順に従って、RevenueCat から履歴データを CSV 形式でエクスポートしてください。
(オプション)RevenueCatサポートにGoogle Purchase Tokensをリクエストする
Google Playのトランザクションをインポートする場合は、RevenueCatのサポートページからGoogle Purchase Tokensが含まれたCSVファイルをリクエストしてください。Google Purchase Tokenは、Google Playが各トランザクションに付与する一意の識別子で、Adaptyで購入を正確に追跡・検証するために必要です。この情報は標準のエクスポートファイルには含まれていません。ファイルには以下の3つの列が含まれます:
user_idgoogle_purchase_tokengoogle_product_id
過去データのインポートをご依頼ください
ウェブサイトのメッセンジャーまたはsupport@adapty.ioにCSVファイルを添付してご連絡ください。
- RevenueCatからエクスポートしたCSVファイルをサポートチームに直接送付してください。
- Google Playのトランザクションをインポートする場合は、RevenueCatサポートから受け取ったGoogle Purchase Tokensが含まれたCSVファイルも添付してください。
- Customer User ID(AdaptyのメインユーザーID)として使用するユーザーIDをお知らせください:
rc_original_app_user_idまたはrc_last_seen_app_user_id_aliasのいずれかです。
サポートチームがトランザクションをAdaptyにインポートします。各トランザクションについて以下のデータがインポートされます:
| パラメータ | 説明 |
|---|---|
| user_id | Customer User ID。Adaptyおよびあなたのシステムにおけるユーザーのメイン識別子。 |
| apple_original_transaction_id | サブスクリプションチェーンの場合、store_original_transaction_idでリンクされた元のトランザクションの購入日。 |
| google_product_id | Google Play StoreのプロダクトID。 |
| google_purchase_token | 各トランザクションに対してGoogle Playが発行する一意の識別子。検証に必要。 |
| country | ユーザーの国。 |
| created_at | ユーザー作成日時。 |
| subscription_expiration_date | サブスクリプションの有効期限日時。 |
| エンドユーザーのメールアドレス。 | |
| phone_number | エンドユーザーの電話番号。 |
| idfa | Appleがユーザーのデバイスに割り当てる広告識別子(IDFA)。 |
| idfv | 1人の開発者の全アプリに割り当てられ、デバイス上でそれらのアプリ間で共有されるベンダー識別子(IDFV)。 |
| advertising_id | 広告トラッキングのためにAndroid OSが提供する一意の識別子。 |
| attribution_channel | マーケティングチャネル名。 |
| attribution_campaign | マーケティングキャンペーン名。 |
| attribution_ad_group | アトリビューションの広告グループ。 |
| attribution_ad_set | アトリビューションの広告セット。 |
| attribution_creative | アトリビューションのクリエイティブキーワード。 |
また、Amplitude、Mixpanel、AppsFlyer、Adjust、FacebookAdsのインテグレーション識別子もインポートされます。
引き継がれないもの
- インポート中にすべてのトランザクションがストアで再検証されるため、ストアが認識しなくなった行は除外されます。
- 実際のストアトランザクションIDを持たない行(例:RevenueCat のプロモーションや手動付与のエンタイトルメント)は、トランザクションなしのプロファイルとしてインポートされます。該当ユーザーのアクセスを復元するには、サーバーサイド API でアクセスレベルを付与してください。
- 返金および請求エラーの履歴はそのまま引き継がれません。返金はキャンセル日のみが保持され、サブスクリプションの請求エラー状態はインポート時点のものとして記録され、過去の日付は記録されません。
よくある質問
Adapty SDKのインストールとAdapty SDK搭載の新バージョンのリリースが完了しました。Adapty SDKを含む新バージョンにアップデートしていない既存のサブスクライバーはどうなりますか?
ほとんどのユーザーは夜間に充電する際にApp Storeが全アプリを自動更新するため、問題にはならないでしょう。アップデートしていない有料サブスクライバーが若干残る可能性はありますが、引き続きプレミアムコンテンツにアクセスできます。強制的にアップデートさせる必要はありません。
RevenueCatから過去データをできるだけ早くエクスポートする必要がありますか?それとも失ってしまいますか?
急ぐ必要はありません。まずAdapty SDKでリリースを行い、その後に過去データをご提供ください。ユーザーの支払い履歴を復元し、プロファイルとチャートに反映します。
MMP(AppsFlyer、Adjustなど)やアナリティクス(Mixpanel、Amplitudeなど)を使用しています。すべて正常に動作するか確認するにはどうすればいいですか?
まず、データを送信したいサードパーティサービスのIDをSDK経由でAdaptyに渡す必要があります。アトリビューションインテグレーションとアナリティクスインテグレーションのガイドをご参照ください。過去データや既存ユーザーについては、RevenueCatからエクスポートしたデータからそれらのIDを必ず渡してください。