Adapty Unity SDK を v. 4.0 に移行する

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

クイックリファレンス

v3v4
Adapty.GetPaywall(placementId, locale, ...)Adapty.GetFlow(placementId, ...)
Adapty.GetPaywallForDefaultAudience(placementId, locale, ...)Adapty.GetFlowForDefaultAudience(placementId, ...)
Adapty.GetPaywallProducts(paywall, ...)Adapty.GetPaywallProducts(flow, ...)
Adapty.LogShowPaywall(paywall, ...)Adapty.LogShowFlow(flow, ...)
AdaptyPaywallAdaptyFlow
AdaptyUI.CreatePaywallView(paywall, ...)AdaptyUI.CreateFlowView(flow, ...)
AdaptyUICreatePaywallViewParametersAdaptyUICreateFlowViewParameters
AdaptyUIPaywallViewAdaptyUIFlowView
AdaptyUI.PresentPaywallView(view, ...) / DismissPaywallView(view, ...)AdaptyUI.PresentFlowView(view, ...) / DismissFlowView(view, ...)
Adapty.SetPaywallsEventsListener(listener)Adapty.SetFlowsEventsListener(listener)
AdaptyPaywallsEventsListenerIAdaptyFlowsEventsListener
AdaptyEventListenerIAdaptyEventListener
AdaptyOnboardingsEventsListenerIAdaptyOnboardingsEventsListener
PaywallViewDidPerformActionPaywallViewDidAppear およびその他の PaywallView... コールバックFlowViewDidPerformActionFlowViewDidAppear およびその他の FlowView... コールバック
PaywallViewDidFailRenderingFlowViewDidReceiveError
Adapty.SetFallbackPaywalls(...) (v3 で非推奨)削除済み — Adapty.SetFallback(fileName, ...) を使用してください
Builder.SetIDFACollectionDisabled(...) (v3 で非推奨)削除済み — Builder.SetAppleIDFACollectionDisabled(...) を使用してください
paywall.Products (AdaptyProductReference のリスト)削除済み — ProductIdentifiers または VendorProductIds を使用するか、完全なプロダクト情報が必要な場合は GetPaywallProducts(flow) を呼び出してください
AdaptyProductReferenceパブリック型として削除済み — データモデルを参照してください
paywall.RemoteConfigString削除済み — flow.RemoteConfig?.Data を使用してください

AdaptyPaywallProduct はその名称を保持しており、プロダクトは引き続きフローに属しています。また、GetPaywallProducts もその名称を保持しており、現在は AdaptyFlow を受け取るようになっています。GetFlow および GetFlowForDefaultAudience メソッドでは、locale パラメーターが不要になりました。購入およびプロファイル関連のAPI(MakePurchaseRestorePurchasesGetProfileIdentifyUpdateProfile)と、SetFallback によるフォールバックは変更ありません。オンボーディングのメソッドは引き続き動作しますが、非推奨となっています。詳細はオンボーディングAPIの非推奨化を参照してください。一部のデフォルト動作が変更されています。詳細はデフォルト動作の変更を参照してください。

インストール

v4.0 はプレリリースのため、正確なベータタグを指定してください。Unity Package Manager 経由でインストールするには、Git URL にタグを追加します:

https://github.com/adaptyteam/AdaptySDK-Unity.git?path=/Packages/com.adapty.unity-sdk#4.0.0-beta.1

Unity パッケージ経由でインストールする場合は、4.0.0-beta.1 リリースから adapty-unity-plugin-4.0.0-beta.1.unitypackage をダウンロードしてください。完全なセットアップ手順については Adapty SDK のインストールを参照してください。

v4 では、ビルド設定に関して 2 つの変更があります:

  • iOS の依存関係が Swift Package Manager に移行しました。 ネイティブ Adapty iOS SDK 4.0 は、CocoaPods の pod ではなく、リモートの Swift パッケージとして宣言されています。External Dependency Manager1.2.188 以降にアップデートしてください。それ以前のバージョンは Swift Package Manager の依存関係をサポートしていません。CocoaPods の手順(iOS Resolver -> Install CocoapodsUnity-iPhone.xcworkspace を開く操作)は不要になりました。
  • iOS のデプロイメントターゲットは 15.0 以降が必須です。 Unity Editor の新しいビルドバリデーターにより、ターゲットがこれより低い場合は iOS ビルドが停止されます。

The underlying native Adapty SDKs are bumped to 4.x on both platforms and are resolved automatically — no other build changes are needed.

フローの取得

GetPaywall → GetFlow

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

- Adapty.GetPaywall("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
+ Adapty.GetFlow("YOUR_PLACEMENT_ID", (flow, error) => {
      if (error != null) {
          // handle the error
          return;
      }
-     // use the paywall
+     // use the flow
  });

GetPaywallForDefaultAudience も同様にリネームされます:

- Adapty.GetPaywallForDefaultAudience("YOUR_PLACEMENT_ID", "en", (paywall, error) => { /* ... */ });
+ Adapty.GetFlowForDefaultAudience("YOUR_PLACEMENT_ID", (flow, error) => { /* ... */ });

GetPaywallProducts(paywall) → GetPaywallProducts(flow)

GetPaywallProducts は名前を維持したまま、AdaptyFlow を受け取るように変わります:

- Adapty.GetPaywallProducts(paywall, (products, error) => {
+ Adapty.GetPaywallProducts(flow, (products, error) => {
      if (error != null) {
          // handle the error
          return;
      }
      // use the products
  });

データモデル

GetFlowAdaptyPaywall の代わりに AdaptyFlow を返し、オブジェクトの構造が変わりました:

v3 AdaptyPaywall プロパティv4 AdaptyFlow プロパティアクション
RemoteConfig(単一、nullable)RemoteConfigs(リスト)フローは設定された言語ごとに1つのリモートコンフィグを持ちます。flow.RemoteConfigs からユーザーに一致するものを読み取ってください。flow.RemoteConfig ショートカットは最初のエントリを返します。
(新規)PaywallsAdaptyFlowPaywall のリスト)各エントリはフロー内の1つのペイウォールバリエーションで、独自の NameVariationIdProductIdentifiers を持ちます。Web ペイウォールのメソッドは AdaptyFlowPaywall を受け取ります。詳しくは Web ペイウォールメソッド を参照してください。
ProductIdentifiersVendorProductIds維持AdaptyFlow では、これらはすべてのペイウォールバリエーションをまたいでプロダクトを集約します。各バリエーションも独自の ProductIdentifiersVendorProductIds を持ちます。プロダクトを取得するには、引き続き GetPaywallProducts(flow) を呼び出してください。
HasViewConfiguration削除コードから HasViewConfiguration のチェックをすべて削除してください。代わりに CreateFlowView がエラーを返します(フローの表示 を参照)。
ProductsAdaptyProductReference のリスト)削除AdaptyProductReference は非公開になり、それとともに PromotionalOfferIdWinBackOfferIdAndroidOfferId の値も使えなくなりました。ProductIdentifiersVendorProductId と Android 専用の BasePlanId(v3 の AndroidBasePlanId)を持つ AdaptyProductIdentifier のリスト)を使用するか、価格やオファーを含む完全な AdaptyPaywallProduct オブジェクトが必要な場合は GetPaywallProducts(flow) を呼び出してください。
RemoteConfigString削除リモートコンフィグ自体から文字列を読み取ってください: flow.RemoteConfig?.Data、または flow.RemoteConfigs の該当エントリから取得します。
(新規)FlowVersionId(nullable)フローのバージョン識別子。利用できない場合は null

AdaptyPaywallProduct に新しいフィールドが追加されました: FlowProductId は、フロー内でのプロダクトの識別子で、フローに属さないプロダクトの場合は null になります。

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

OpenWebPaywallCreateWebPaywallUrl はメソッド名はそのままですが、paywall 引数に AdaptyFlowPaywall を渡すようになりました。これは flow.Paywalls 内のいずれかのバリアントです。引き続き AdaptyPaywallProduct を渡すこともできます:

- Adapty.OpenWebPaywall(paywall, AdaptyWebPresentation.ExternalBrowser, (error) => { /* ... */ });
+ var flowPaywall = flow.Paywalls.FirstOrDefault();
+ if (flowPaywall != null) {
+     Adapty.OpenWebPaywall(flowPaywall, AdaptyWebPresentation.ExternalBrowser, (error) => { /* ... */ });
+ }

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

LogShowPaywall → LogShowFlow

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

- Adapty.LogShowPaywall(paywall, (error) => { /* ... */ });
+ Adapty.LogShowFlow(flow, (error) => { /* ... */ });

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

フローの表示

CreatePaywallView → CreateFlowView

ファクトリーメソッドの名前を変更し、AdaptyFlow を渡します。返されるビューの型は AdaptyUIPaywallView から AdaptyUIFlowView に変更されていますが、そのメソッド(PresentDismiss)は変更されておらず、省略可能なパラメーターオブジェクトは AdaptyUICreateFlowViewParameters という新しい名前になり、同じフィールド(LoadTimeoutPreloadProductsCustomTagsCustomTimersCustomAssetsProductPurchaseParameters)に加え、LocaleEnableSafeAreaPaddings の2つの新しいフィールドが追加されています:

- AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
+ AdaptyUI.CreateFlowView(flow, parameters, (view, error) => {
      if (error != null) {
          // handle the error
          return;
      }
      view.Present((error) => { /* handle the error */ });
  });

CreateFlowView は、フローにビュー設定がない場合にエラーを返します。これは v3 の HasViewConfiguration チェックを置き換えるものです:

- if (paywall.HasViewConfiguration) {
-     AdaptyUI.CreatePaywallView(paywall, null, (view, error) => { /* ... */ });
- }
+ AdaptyUI.CreateFlowView(flow, (view, error) => {
+     if (error != null) {
+         // the flow has no view configured, or view creation failed
+         return;
+     }
+     view.Present((error) => { /* handle the error */ });
+ });

フローのビューは使い捨てです。Dismiss を呼び出すとビューが破棄されるため、再度フローを表示するには CreateFlowView をもう一度呼び出してください。

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

AdaptyUICreateFlowViewParameters には EnableSafeAreaPaddings が追加されており、実行時に Android のセーフエリアパディングを制御します。iOS では無視され、デフォルト値は true です。

var parameters = new AdaptyUICreateFlowViewParameters()
    .SetEnableSafeAreaPaddings(false);

イベントの処理

リスナーインターフェースは C# の I プレフィックス規則に準拠するようになりました。レガシーのエイリアスは保持されていないため、実装箇所で AdaptyEventListenerIAdaptyEventListener に、AdaptyOnboardingsEventsListenerIAdaptyOnboardingsEventsListener にそれぞれ名前変更してください。

フローイベントリスナーの名前が AdaptyPaywallsEventsListener から IAdaptyFlowsEventsListener に変更され、登録メソッドが SetPaywallsEventsListener から SetFlowsEventsListener に変更されました。また、コールバックの PaywallView プレフィックスが FlowView に変更されています。既存のハンドラー本体のコードを変更する必要はありません。インターフェースとメソッドの名前を変更するだけです。

- public class MyListener : MonoBehaviour, AdaptyPaywallsEventsListener {
-     public void PaywallViewDidFinishPurchase(
-         AdaptyUIPaywallView view,
+ public class MyListener : MonoBehaviour, IAdaptyFlowsEventsListener {
+     public void FlowViewDidFinishPurchase(
+         AdaptyUIFlowView view,
          AdaptyPaywallProduct product,
          AdaptyPurchaseResult purchasedResult
      ) {
          // custom logic after purchase
      }
      // ...
  }

- Adapty.SetPaywallsEventsListener(myListener);
+ Adapty.SetFlowsEventsListener(myListener);

1つのコールバックが名前変更されました:PaywallViewDidFailRenderingFlowViewDidReceiveError になります。以前と同様のレンダリングエラーに加え、購入以外のその他のランタイムエラーでも発火します:

- public void PaywallViewDidFailRendering(AdaptyUIPaywallView view, AdaptyError error) { }
+ public void FlowViewDidReceiveError(AdaptyUIFlowView view, AdaptyError error) { }

コールバックの完全なリストについては、フロー&ペイウォールイベントの処理を参照してください。

新しい API

  • Adapty.SetObserverModeResolver(...)IAdaptyUIObserverModeResolver を指定すると、SDK が Observer モードで動作している際にフローから開始された購入やリストアを処理できます。以前はネイティブの iOS および Android SDK でのみ利用可能でした。詳細は Observer モードでフローを表示する をご覧ください。
  • Adapty.SetSystemRequestsHandler(...)IAdaptyUISystemRequestsHandler を指定すると、フローからのシステムリクエスト(OS のパーミッションプロンプト(FlowViewDidAskPermission)やアプリレビューリクエスト(FlowViewDidRequestAppReview))を処理できます。フローはまだこれらのリクエストをトリガーしないため、ハンドラーを登録する必要はありません。
  • AdaptyUICreateFlowViewParameters.LocaleSetLocale で設定)— デバイスから解決されるロケールではなく、特定の Builder ローカライゼーション でフローまたはペイウォールをレンダリングします。フローのローカライゼーションはビューの作成時に適用されるため、ここがローカライゼーションを指定できる唯一のタイミングです。作成されたビューは view.Locale に、ビルド時に使用されたローカライゼーションを報告します。詳細は ローカライゼーションとロケールコードの使用 をご覧ください。
  • IAdaptyFlowsEventsListener の新しいコールバック FlowViewDidReceiveAnalyticEvent は、フローからのカスタム分析イベント用に予約されています。フローはまだこれらをコードに送出しないため、空のボディで実装してください。
  • AdaptyUI.OpenUrl(url, openIn, ...) および AdaptyUI.RequestAppReview(...)open_url アクションとアプリレビューリクエストのネイティブ処理です。FlowViewDidPerformAction から OpenUrl を呼び出すことでデフォルトの URL 動作を維持できます。RequestAppReview はデフォルトのアプリレビュープロンプトを支援しますが、フローはまだこれをトリガーしません。

デフォルト動作の変更

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

  • 購入完了時の動作: v3 では購入成功後にビューが自動的に閉じられていました。v4 では、購入またはエラーの後もフローは開いたまま維持され、明示的に閉じるまで SDK は何も行いません。ユーザーがアクセスを取得したら、FlowViewDidFinishPurchase 内で自ら view.Dismiss(...) を呼び出してください。
  • Android のシステムバック: システムの戻るボタン(または戻るジェスチャー)は、SystemBack アクションとして FlowViewDidPerformAction に渡されるようになり、フローを自動的に閉じなくなりました。これは、システムジェスチャーでフローを閉じられない iOS の動作に合わせたものです。ユーザーが明示的に離脱できるよう(Close ボタンや on_device_back アクションなど)、またはアクション処理時に自分でビューを閉じてください。
  • ビューは使い捨て: Dismiss を呼び出すとビューは破棄されます。フローを再度表示するには CreateFlowView を再度呼び出してください。
  • オブザーバーモードのトランザクション: ReportTransaction は成功時にデコードエラーを返さなくなりました。v3 では成功レスポンスのパースに誤りがあり、成功した報告が常にエラーで完了していました。

オンボーディング API の廃止

レガシーオンボーディング API は v4.0 で非推奨となり、フロービルダーに置き換えられました。引き続き動作しますが、将来のリリースで削除される予定です。オンボーディングをフロービルダーに移行する計画を立ててください。

非推奨のシンボル: GetOnboardingGetOnboardingForDefaultAudienceAdaptyUI.CreateOnboardingViewAdaptyUI.PresentOnboardingViewAdaptyUI.DismissOnboardingViewAdapty.SetOnboardingsEventsListener