Adapty React Native SDK を v. 4.0 に移行する
Adapty React Native SDK 4.0(ベータ版)ではフローが導入され、ペイウォール API の名称が変更されました。新しい API はフロービルダーと既存のペイウォールビルダーの両方に対応しており、Adapty ダッシュボード側での設定変更は不要です。
クイックリファレンス
| v3 | v4 |
|---|---|
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 |
onPaywallShown | onAppeared |
onPaywallClosed | onDisappeared |
onRenderingFailed | onError |
AdaptyPaywallProduct は名前を維持します。プロダクトは引き続きフローに属し、getPaywallProducts は AdaptyFlow を受け取るようになりました。getFlow および getFlowForDefaultAudience メソッドは locale パラメーターを受け取らなくなりました。ビューメソッド present、dismiss、setEventHandlers、showDialog、およびイベントハンドラー onCloseButtonPress、onUrlPress、onCustomAction、onProductSelected、onPurchaseStarted、onPurchaseCompleted、onPurchaseFailed、onRestoreStarted、onRestoreCompleted、onRestoreFailed、onLoadingProductsFailed、onWebPaymentNavigationFinished、onAndroidSystemBack は 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以降ではネイティブのAdapty・AdaptyUI・AdaptyPlugin SDKはCocoaPodsのサブ依存関係としては取得されなくなりました。代わりに、podspecがSwift Package Manager(spm_dependencyヘルパー経由)を通じて取得する仕組みに変わっています。これにより、次の2点が必要となります。
- React Native 0.75 以降 —
spm_dependencypodspec ヘルパーに必要です。古いバージョンではpod installが明示的なエラーで失敗するため、先に React Native をアップグレードするか、react-native-adapty3.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
以前に Adapty、AdaptyUI、または 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);
データモデル
getFlow は AdaptyPaywall の代わりに AdaptyFlow を返し、オブジェクトの形状が変更されました:
v3 AdaptyPaywall フィールド | v4 AdaptyFlow フィールド | 対応内容 |
|---|---|---|
remoteConfig?(単一) | remoteConfigs?: AdaptyRemoteConfig[](配列) | フローは設定された言語ごとに 1 つのリモートコンフィグを持ちます。ユーザーに合うものを取得するには flow.remoteConfigs?.find((c) => c.lang === 'en') を使います。 |
products | flow.paywalls[i].productIdentifiers | プロダクト識別子はフロー全体ではなく、各フローバリアントに移動しました。 |
webPurchaseUrl? | flow.paywalls[i].webPurchaseUrl | フロー全体からペイウォールバリアントごとに移動しました。 |
version?: number | flowVersionId?: 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ペイウォールのメソッド
openWebPaywall と createWebPaywallUrl はメソッド名を変更しませんが、第1引数が AdaptyPaywall の代わりに AdaptyFlowPaywall(フローのバリアント)になりました。引き続き AdaptyPaywallProduct も渡せます。
const flow = await adapty.getFlow('YOUR_PLACEMENT_ID');
- await adapty.openWebPaywall(paywall);
+ await adapty.openWebPaywall(flow.paywalls[0]);
フローのビュー数を計測する
logShowPaywall → logShowFlow
logShowPaywall は logShowFlow に名称変更され、AdaptyFlow を受け取るようになりました。イベントは引き続き同じバリエーションに対してログが記録されるため、既存のファネルや A/B テストの指標はダッシュボードの変更なしに引き続き機能します。
- await adapty.logShowPaywall(paywall);
+ await adapty.logShowFlow(flow);
v3 と同様に、フロービルダーやペイウォールビルダーでレンダリングされたフローやペイウォールを表示する際は、このメソッドを呼び出す必要はありません。Adapty がそれらのビューを自動的に追跡します。
フローの表示
createPaywallView → createFlowView
ファクトリー関数の名前を変更し、AdaptyFlow を渡します。返されるコントローラーのメソッド(present、dismiss、setEventHandlers、showDialog)は変わりません:
- 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 です。完全なリストはフロー&ペイウォールイベントの処理を参照してください。
onDisappeared は createFlowView().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 サブスクリプション更新の形式は廃止されました。oldSubVendorProductId と prorationMode をネストされた subscriptionUpdateParams オブジェクトに移動し、isOfferPersonalized はトップレベルに残してください。完全な例については購入の実装を参照してください。
Android: セーフエリアのパディング
Android のブール型リソース <bool name="adapty_paywall_enable_safe_area_paddings">…</bool> は削除されました。res/values/bools.xml からこのリソースを削除し、フロービューを作成する際に enableSafeArea パラメータを使ってセーフエリアのパディングをランタイムで制御してください。デフォルト値は、モーダル表示の場合は true、埋め込みコンポーネントの場合は false です。
モックモード
モックモード(Expo Go またはウェブプレビュー)で SDK を実行する場合は、モックコンフィグのキー paywalls を flows に変更してください。
デフォルト動作の変更
これらの変更はコンパイルエラーを引き起こさないため、実行時にテストしてください。
onAndroidSystemBack: デフォルトの動作が、ビューを閉じる動作からビューを開いたままにする動作に変更されました。以前の動作に戻すには、ハンドラーからtrueを返してください。onPurchaseCompleted: デフォルトの動作が、(ユーザーが購入をキャンセルした場合を除いて)ビューを閉じる動作から、常にビューを開いたままにする動作に変更されました。以前の動作に戻すには、ハンドラーからpurchaseResult.type !== 'user_cancelled'を返してください。onRestoreCompleted: デフォルトの動作が、復元成功後にビューを閉じる動作からビューを開いたままにする動作に変更されました。以前の動作に戻すには、ハンドラーからtrueを返してください。onUrlPress: デフォルトの動作が変更され、ダッシュボードのアプリ内ブラウザまたは外部ブラウザの設定に従い、ネイティブレイヤーを通じて URL を開くようになりました。URL を独自に処理したい場合は、ハンドラーをオーバーライドしてください。
オンボーディング API の非推奨化
レガシーオンボーディング API は、Flow Builder への移行に伴い v4.0 で非推奨となりました。引き続き動作はしますが、IDE は @deprecated アノテーションを通じて非推奨のシンボルを警告します(実行時の警告はありません)。これらのシンボルは将来のリリースで削除される予定ですので、オンボーディングの Flow Builder への移行を計画してください。
非推奨のシンボル: getOnboarding、getOnboardingForDefaultAudience、createOnboardingView、AdaptyOnboardingView。