フローとペイウォールの表示 - Flutter

フローや旧ペイウォールビルダーで作成したペイウォールがある場合、ユーザーに表示するためにモバイルアプリのコードでレンダリングを手動で実装する必要はありません。そのようなフローやペイウォールには、表示する内容と表示方法の両方が含まれています。

Warning

このガイドは、Adaptyがレンダリングするフローとペイウォールに関するものです。リモートコンフィグペイウォールの表示については、リモートコンフィグで設計されたペイウォールの表示をご覧ください。

Adapty Flutter SDKには、フローとペイウォールを表示する2つの方法があります:

  • スタンドアロン画面

  • 埋め込みウィジェット

スタンドアロン画面として表示する

フローまたはペイウォールをスタンドアロン画面として表示するには、createFlowView メソッドで作成した view に対して view.present() メソッドを使用します。各 view は一度しか表示できません。閉じると、そのビューはメモリから解放されます。フローまたはペイウォールを再度表示する必要がある場合は、createFlowView をもう一度呼び出して新しい view インスタンスを作成するか、SDK 4.1 以降では解放せずに閉じることができます。

try {
  await view.present();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Tip

Adapty SDK がモバイルアプリにどのように組み込まれているか、実際の例を見たいですか?ペイウォールの表示、購入処理、その他の基本的な機能を含むフルセットアップを示したサンプルアプリをご覧ください。

フローまたはペイウォールを閉じる

フローやペイウォールをプログラムで閉じるには、dismiss() メソッドを使用します。

try {
  await view.dismiss();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Note

ビューを閉じるとメモリから解放されます。閉じたビューは再表示できないため、代わりに createFlowView で新しいビューを作成してください。

SDK 4.1 以降では、destroy: false を渡すことでビューをメモリに保持できます。

await view.dismiss(destroy: false);

このビューを再度表示すると、ユーザーはフローが積み上げた状態のまま、離れた画面に戻ります。この方法で保持されたビューは、destroy: true で削除するまで保持されます。

ダイアログを表示する

Android でフローまたはペイウォールビューが表示されているときは、ネイティブのアラートダイアログの代わりにこのメソッドを使用してください。Android では、通常のアラートがビューの後ろに表示されるため、ユーザーから見えなくなります。このメソッドを使用すると、すべてのプラットフォームでフローまたはペイウォールの上に正しくダイアログが表示されます。

try {
  final action = await view.showDialog(
    title: 'Close paywall?',
    content: 'You will lose access to exclusive offers.',
    primaryActionTitle: 'Stay',
    secondaryActionTitle: 'Close',
  );
  
  if (action == AdaptyUIDialogActionType.secondary) {
    // User confirmed - close the paywall
    await view.dismiss();
  }
  // If primary - do nothing, user stays
} catch (e) {
  // handle error
}

iOSプレゼンテーションスタイルの設定

present() メソッドに iosPresentationStyle パラメータを渡すことで、iOS でのフローまたはペイウォールの表示スタイルを設定できます。このパラメータには AdaptyUIIOSPresentationStyle.fullScreen(デフォルト)または AdaptyUIIOSPresentationStyle.pageSheet を指定できます。

try {
  await view.present(iosPresentationStyle: AdaptyUIIOSPresentationStyle.pageSheet);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

ウィジェット階層への埋め込み

フローやペイウォールを既存のウィジェットツリー内に埋め込むには、AdaptyUIFlowPlatformView ウィジェットを Flutter のウィジェット階層に直接配置します。

AdaptyUIFlowPlatformView(
  flow: flow, // The flow object you fetched
  locale: 'en', // The localization to render the flow with
  onDidAppear: (view) {
  },
  onDidDisappear: (view) {
  },
  onDidPerformAction: (view, action) {
  },
  onDidSelectProduct: (view, productId) {
  },
  onDidStartPurchase: (view, product) {
  },
  onDidFinishPurchase: (view, product, purchaseResult) {
  },
  onDidFailPurchase: (view, product, error) {
  },
  onDidStartRestore: (view) {
  },
  onDidFinishRestore: (view, profile) {
  },
  onDidFailRestore: (view, error) {
  },
  onDidReceiveError: (view, error) {
  },
  onDidFailLoadingProducts: (view, error) {
  },
  onDidFinishWebPaymentNavigation: (view, product, error) {
  },
)
Note

Android のプラットフォームビューを機能させるには、MainActivityFlutterFragmentActivity を継承していることを確認してください:

class MainActivity : FlutterFragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

ペイウォールビルダーでペイウォールをカスタマイズした場合、モバイルアプリのコード側でレンダリングの処理を実装しなくても、ユーザーに表示できます。このようなペイウォールには、表示する内容と表示方法の両方が含まれています。

Warning

このガイドは、Adapty SDK 3.x 向けの旧ペイウォールビルダーで作成されたペイウォールのみを対象としています。SDK v3.2.0 以降が必要です。SDK 2.x 以前向けに作成されたペイウォールや、リモートコンフィグペイウォールの表示方法は異なります。

Adapty Flutter SDK では、ペイウォールを表示する方法が 2 つあります:

  • スタンドアロン画面

  • 埋め込みウィジェット

スタンドアロン画面として表示する

ペイウォールをスタンドアロン画面として表示するには、createPaywallView メソッドで作成した view に対して view.present() メソッドを呼び出します。各 view は一度しか使用できません。再度ペイウォールを表示する必要がある場合は、createPaywallView をもう一度呼び出して新しい view インスタンスを作成してください。

Warning

同じ view を再作成せずに再利用すると、AdaptyUIError.viewAlreadyPresented エラーが発生する場合があります。

try {
  await view.present();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
Tip

Adapty SDK がモバイルアプリにどのように組み込まれているか、実際の例を見たいですか?ペイウォールの表示、購入処理、その他の基本的な機能を含むフルセットアップを示したサンプルアプリをご覧ください。

ペイウォールを閉じる

ペイウォールをプログラムで閉じる必要がある場合は、dismiss() メソッドを使用してください:

try {
  await view.dismiss();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

ダイアログを表示する

Android でペイウォールビューが表示されている場合は、ネイティブのアラートダイアログの代わりにこのメソッドを使用してください。Android では、通常のアラートがペイウォールビューの背後に表示されるため、ユーザーには見えません。このメソッドを使用することで、すべてのプラットフォームでペイウォールの前面にダイアログが正しく表示されます。

try {
  final action = await view.showDialog(
    title: 'Close paywall?',
    content: 'You will lose access to exclusive offers.',
    primaryActionTitle: 'Stay',
    secondaryActionTitle: 'Close',
  );
  
  if (action == AdaptyUIDialogActionType.secondary) {
    // User confirmed - close the paywall
    await view.dismiss();
  }
  // If primary - do nothing, user stays
} catch (e) {
  // handle error
}

iOS のプレゼンテーションスタイルを設定する

present() メソッドに iosPresentationStyle パラメーターを渡すことで、iOS でのペイウォールの表示スタイルを設定できます。このパラメーターには AdaptyUIIOSPresentationStyle.fullScreen(デフォルト)または AdaptyUIIOSPresentationStyle.pageSheet を指定できます。

try {
  await view.present(iosPresentationStyle: AdaptyUIIOSPresentationStyle.pageSheet);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

ウィジェット階層への埋め込み

ペイウォールを既存のウィジェットツリーに埋め込むには、AdaptyUIPaywallPlatformView ウィジェットを Flutter のウィジェット階層に直接配置します。

AdaptyUIPaywallPlatformView(
  paywall: paywall, // The paywall object you fetched
  onDidAppear: (view) {
  },
  onDidDisappear: (view) {
  },
  onDidPerformAction: (view, action) {
  },
  onDidSelectProduct: (view, productId) {
  },
  onDidStartPurchase: (view, product) {
  },
  onDidFinishPurchase: (view, product, purchaseResult) {
  },
  onDidFailPurchase: (view, product, error) {
  },
  onDidStartRestore: (view) {
  },
  onDidFinishRestore: (view, profile) {
  },
  onDidFailRestore: (view, error) {
  },
  onDidFailRendering: (view, error) {
  },
  onDidFailLoadingProducts: (view, error) {
  },
  onDidFinishWebPaymentNavigation: (view, product, error) {
  },
)
Note

Android のプラットフォームビューを機能させるには、MainActivityFlutterFragmentActivity を継承していることを確認してください:

class MainActivity : FlutterFragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}