Adapty React Native SDK を v. 4.0 に移行する

Adapty React Native SDK 4.0(ベータ版)ではフローが導入され、ペイウォール API の名称が変更されました。新しい API はフロービルダーと既存のペイウォールビルダーの両方に対応しており、Adapty ダッシュボード側での設定変更は不要です。

クイックリファレンス

v3v4
adapty.getPaywall(placementId, locale?, params?)adapty.getFlow(placementId, params?)
adapty.getPaywallForDefaultAudience(placementId, locale?, params?)adapty.getFlowForDefaultAudience(placementId, params?)
adapty.getPaywallProducts(paywall)adapty.getPaywallProducts(flow)
adapty.logShowPaywall(paywall)adapty.logShowFlow(flow)
AdaptyPaywall(型)AdaptyFlow
createPaywallView(paywall)createFlowView(flow)
AdaptyPaywallView(コンポーネント)AdaptyFlowView
EventHandlers(型)FlowEventHandlers
onPaywallShownonAppeared
onPaywallClosedonDisappeared
onRenderingFailedonError
AdaptyPaywallProduct は名前を維持します。プロダクトは引き続きフローに属し、getPaywallProductsAdaptyFlow を受け取るようになりました。getFlow および getFlowForDefaultAudience メソッドは locale パラメーターを受け取らなくなりました。ビューメソッド presentdismisssetEventHandlersshowDialog、およびイベントハンドラー onCloseButtonPressonUrlPressonCustomActiononProductSelectedonPurchaseStartedonPurchaseCompletedonPurchaseFailedonRestoreStartedonRestoreCompletedonRestoreFailedonLoadingProductsFailedonWebPaymentNavigationFinishedonAndroidSystemBack は v3 と同じ名前を維持します。一部のデフォルト動作が変更されました。詳細はデフォルト動作の変更を参照してください。

最低 iOS バージョン

Adapty React Native SDK 4.0 では、iOS の最低デプロイメントターゲットが iOS 13.0 から iOS 15.0 に引き上げられました。アップグレードの前に、iOS デプロイメントターゲットを 15.0 以降に設定してください。

インストール

パッケージのアップデート

v4.0 はプレリリース版のため、正確なバージョンを指定してインストールしてください。npm はキャレット/チルダの範囲指定ではプレリリース版を選択しません。

npm install [email protected]
# or
yarn add [email protected]

iOS:ネイティブSDKがSwift Package Manager経由で提供されるようになりました

CocoaPodsのスペックリポジトリは2026年12月に読み取り専用になります。そのため、v4以降ではネイティブのAdaptyAdaptyUIAdaptyPlugin SDKはCocoaPodsのサブ依存関係としては取得されなくなりました。代わりに、podspecがSwift Package Managerspm_dependencyヘルパー経由)を通じて取得する仕組みに変わっています。これにより、次の2点が必要となります。

  • React Native 0.75 以降spm_dependency podspec ヘルパーに必要です。古いバージョンでは pod install が明示的なエラーで失敗するため、先に React Native をアップグレードするか、react-native-adapty 3.x を使用してください。
  • ダイナミックフレームワーク — SPM の依存関係にはダイナミックリンクが必要です。有効にする方法は Expo とベアの React Native で異なります。

Expo

expo-build-properties 設定プラグインを追加し、app.json(または app.config.js)で iOS フレームワークをダイナミックに設定します。

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "ios": {
            "useFrameworks": "dynamic"
          }
        }
      ]
    ]
  }
}

次に、プラグインをインストールしてネイティブプロジェクトを再生成します:

npx expo install expo-build-properties
npx expo prebuild --clean

Bare React Native

iOS ターゲットにダイナミックフレームワークを追加し、pod を再インストールします:

use_frameworks! :linkage => :dynamic
cd ios && pod install --repo-update

以前に AdaptyAdaptyUI、または AdaptyPlugin を CocoaPods のサブ依存関係として追加していた場合は、先に Podfile から pod 'Adapty'pod 'AdaptyUI'、または pod 'AdaptyPlugin' の行を削除してください。

デフォルトの静的リンクからダイナミックフレームワークへの切り替えは、モジュラーヘッダーをまだサポートしていないライブラリと競合する可能性があり、Flipper とも互換性がありません。ビルドに問題が発生した場合は、Swift Package Manager と React Native ライブラリの統合に関するこちらの記事を参照してください。

完全なセットアップ手順については、Adapty SDK のインストールを参照してください。

フローの取得

getPaywall → getFlow

返り値の型が AdaptyPaywall から AdaptyFlow に変わり、locale パラメータが削除されました — フローをレンダリングする際、ロケールは自動的に解決されます。カスタムペイウォールの場合、すべてのロケールは flow.remoteConfigs に返されます:

- const paywall = await adapty.getPaywall('YOUR_PLACEMENT_ID', 'en');
+ const flow = await adapty.getFlow('YOUR_PLACEMENT_ID');

getPaywallForDefaultAudience も同様にリネームされています:

- const paywall = await adapty.getPaywallForDefaultAudience('YOUR_PLACEMENT_ID', 'en');
+ const flow = await adapty.getFlowForDefaultAudience('YOUR_PLACEMENT_ID');

getPaywallProducts(paywall) → getPaywallProducts(flow)

getPaywallProducts は名前はそのままですが、AdaptyFlow を受け取るようになりました:

- const products = await adapty.getPaywallProducts(paywall);
+ const products = await adapty.getPaywallProducts(flow);

データモデル

getFlowAdaptyPaywall の代わりに AdaptyFlow を返し、オブジェクトの形状が変更されました:

v3 AdaptyPaywall フィールドv4 AdaptyFlow フィールド対応内容
remoteConfig?(単一)remoteConfigs?: AdaptyRemoteConfig[](配列)フローは設定された言語ごとに 1 つのリモートコンフィグを持ちます。ユーザーに合うものを取得するには flow.remoteConfigs?.find((c) => c.lang === 'en') を使います。
productsflow.paywalls[i].productIdentifiersプロダクト識別子はフロー全体ではなく、各フローバリアントに移動しました。
webPurchaseUrl?flow.paywalls[i].webPurchaseUrlフロー全体からペイウォールバリアントごとに移動しました。
version?: numberflowVersionId?: string名称が変更され、型が number から string に変わりました。
hasViewConfiguration削除コードから hasViewConfiguration のチェックをすべて削除してください。
requestLocale削除ロケールはモデルの一部ではなくなりました。
(新規)paywalls: AdaptyFlowPaywall[]各エントリはフロー内のペイウォールバリアントを表します。
(新規)responseCreatedAt: numberサーバーレスポンスのタイムスタンプ(ミリ秒単位)。
Product identifiers moved from the flow to each variation:
- const ids = paywall.products;
+ const ids = flow.paywalls[0].productIdentifiers;

Webペイウォールのメソッド

openWebPaywallcreateWebPaywallUrl はメソッド名を変更しませんが、第1引数が AdaptyPaywall の代わりに AdaptyFlowPaywall(フローのバリアント)になりました。引き続き AdaptyPaywallProduct も渡せます。

  const flow = await adapty.getFlow('YOUR_PLACEMENT_ID');
- await adapty.openWebPaywall(paywall);
+ await adapty.openWebPaywall(flow.paywalls[0]);

フローのビュー数を計測する

logShowPaywall → logShowFlow

logShowPaywalllogShowFlow に名称変更され、AdaptyFlow を受け取るようになりました。イベントは引き続き同じバリエーションに対してログが記録されるため、既存のファネルや A/B テストの指標はダッシュボードの変更なしに引き続き機能します。

- await adapty.logShowPaywall(paywall);
+ await adapty.logShowFlow(flow);

v3 と同様に、フロービルダーペイウォールビルダーでレンダリングされたフローやペイウォールを表示する際は、このメソッドを呼び出す必要はありません。Adapty がそれらのビューを自動的に追跡します。

フローの表示

createPaywallView → createFlowView

ファクトリー関数の名前を変更し、AdaptyFlow を渡します。返されるコントローラーのメソッド(presentdismisssetEventHandlersshowDialog)は変わりません:

- import { createPaywallView } from 'react-native-adapty';
+ import { createFlowView } from 'react-native-adapty';

- const view = await createPaywallView(paywall);
+ const view = await createFlowView(flow);
  await view.present();

AdaptyPaywallView → AdaptyFlowView

Reactコンポーネントでレンダリングする場合は、名前を変更して flow プロップを渡してください:

- import { AdaptyPaywallView } from 'react-native-adapty';
+ import { AdaptyFlowView } from 'react-native-adapty';

- <AdaptyPaywallView paywall={paywall} /* … */ />
+ <AdaptyFlowView flow={flow} /* … */ />

createFlowView で作成したフロービューは一度きりの使用です。dismiss() を呼び出すとビューが破棄されるため、再度フローを表示するには createFlowView を再度呼び出してください。埋め込み型の AdaptyFlowView はアンマウントすることで閉じられます。ハンドラーから true を返しても埋め込みビューは閉じられないため、代わりに onCloseButtonPress などで自分自身の状態を変更してください。

イベントの処理

イベントハンドラーのインターフェースは EventHandlers から FlowEventHandlers に名前が変更され、3つのコールバックも名前が変わりました。ハンドラーの中身はそのままで、名前だけ変更してください:

- onPaywallShown: () => { /* … */ },
+ onAppeared: () => { /* … */ },

- onPaywallClosed: () => { /* … */ },
+ onDisappeared: () => { /* … */ },

- onRenderingFailed: (error) => { /* … */ },
+ onError: (error) => { /* … */ },

他のイベントハンドラーはそのまま名前が変わりません。また、2つのハンドラーは第2引数が追加されています:onPurchaseCompleted(purchaseResult, product)onPurchaseFailed(error, product) となり、product は関連する AdaptyPaywallProduct です。完全なリストはフロー&ペイウォールイベントの処理を参照してください。

onDisappearedcreateFlowView().present() でモーダル表示されたフローでのみ発火します。AdaptyFlowView コンポーネントはこれをプロップとして公開していません。埋め込みビューを閉じるにはアンマウントしてください。

v4 にはオプトインで使用できる機能がいくつか追加されています:

  • adapty.openWebUrl(url, openIn?) および adapty.requestAppReview() メソッド — これらはデフォルトの onUrlPress および onRequestAppReview ハンドラーを支えているため、URLとアプリレビューのプロンプトはそのままネイティブに処理されます。これらのハンドラーをオーバーライドする場合のみ、直接呼び出してください。
  • 新しい onObserverPurchaseInitiated / onObserverRestoreInitiated ハンドラーを使用した、フロー内でのオブザーバーモードによる購入処理。詳しくはオブザーバーモードでの購入処理をご覧ください。

削除・非推奨のAPI

setFallbackPaywalls → setFallback

setFallbackPaywalls は削除されました。代わりに同じ引数を受け取る setFallback を使用してください:

- await adapty.setFallbackPaywalls(fileLocation);
+ await adapty.setFallback(fileLocation);

削除されたエクスポート

以下のシンボルは react-native-adapty からエクスポートされなくなりました。これらのインポートは削除してください:

  • AdaptyPaywall: 代わりに AdaptyFlow を使用してください。
  • ProductReference: 代わりに AdaptyProductIdentifier を使用し、flow.paywalls[i].productIdentifiers から読み取ってください。
  • AdaptyPaywallBuilder: 削除されました。フローとペイウォールはネイティブでレンダリングされます。
  • AdaptyAndroidSubscriptionUpdateParameters: ネストされた subscriptionUpdateParams の形式を使用してください(下記参照)。

activate: lockMethodsUntilReady

lockMethodsUntilReady は削除され、この動作は常に有効になりました。activate の呼び出しから削除してください。残しているとコンパイルエラーになります:

- await adapty.activate('PUBLIC_SDK_KEY', { lockMethodsUntilReady: true });
+ await adapty.activate('PUBLIC_SDK_KEY');

makePurchase: Android サブスクリプションの更新

フラットな Android サブスクリプション更新の形式は廃止されました。oldSubVendorProductIdprorationMode をネストされた subscriptionUpdateParams オブジェクトに移動し、isOfferPersonalized はトップレベルに残してください。完全な例については購入の実装を参照してください。

Android: セーフエリアのパディング

Android のブール型リソース <bool name="adapty_paywall_enable_safe_area_paddings">…</bool> は削除されました。res/values/bools.xml からこのリソースを削除し、フロービューを作成する際に enableSafeArea パラメータを使ってセーフエリアのパディングをランタイムで制御してください。デフォルト値は、モーダル表示の場合は true、埋め込みコンポーネントの場合は false です。

モックモード

モックモード(Expo Go またはウェブプレビュー)で SDK を実行する場合は、モックコンフィグのキー paywallsflows に変更してください。

デフォルト動作の変更

これらの変更はコンパイルエラーを引き起こさないため、実行時にテストしてください。

  • onAndroidSystemBack: デフォルトの動作が、ビューを閉じる動作からビューを開いたままにする動作に変更されました。以前の動作に戻すには、ハンドラーから true を返してください。
  • onPurchaseCompleted: デフォルトの動作が、(ユーザーが購入をキャンセルした場合を除いて)ビューを閉じる動作から、常にビューを開いたままにする動作に変更されました。以前の動作に戻すには、ハンドラーから purchaseResult.type !== 'user_cancelled' を返してください。
  • onRestoreCompleted: デフォルトの動作が、復元成功後にビューを閉じる動作からビューを開いたままにする動作に変更されました。以前の動作に戻すには、ハンドラーから true を返してください。
  • onUrlPress: デフォルトの動作が変更され、ダッシュボードのアプリ内ブラウザまたは外部ブラウザの設定に従い、ネイティブレイヤーを通じて URL を開くようになりました。URL を独自に処理したい場合は、ハンドラーをオーバーライドしてください。

オンボーディング API の非推奨化

レガシーオンボーディング API は、Flow Builder への移行に伴い v4.0 で非推奨となりました。引き続き動作はしますが、IDE は @deprecated アノテーションを通じて非推奨のシンボルを警告します(実行時の警告はありません)。これらのシンボルは将来のリリースで削除される予定ですので、オンボーディングの Flow Builder への移行を計画してください。

非推奨のシンボル: getOnboardinggetOnboardingForDefaultAudiencecreateOnboardingViewAdaptyOnboardingView