Android SDKでFlow & Paywall Builderを使ってアプリ内課金を有効にする LLM 用にコピー Markdown で表示 ツールをインストール アプリ内課金を有効にするには、3つの重要な概念を理解する必要があります。
プロダクト – ユーザーが購入できるもの(サブスクリプション、消耗型アイテム、永続アクセス)
フロー – ノーコードの Flow & Paywall Builder で作成した、プロダクトをユーザーに提示するための画面シーケンス。SDK は getFlow を通じて取得します。独自のコードで UI を構築したい場合は、代わりにペイウォールを使用してください — ペイウォールを手動で実装する を参照。
プレースメント – アプリ内でフローを表示する場所とタイミング(main、onboarding、settings など)。ダッシュボードでフローをプレースメントに紐付け、コード内ではプレースメント ID を指定して取得します。これにより、A/B テストの実施や異なるユーザーへの異なるフローの表示が簡単になります。
Adapty では、アプリで購入機能を有効にする方法を3つ提供しています。アプリの要件に応じていずれかを選択してください。
実装方法 複雑さ 使用するケース Adapty フロー & ペイウォールビルダー ✅ 簡単 ノーコードビルダーで購入対応済みのフローを作成 します。Adapty が自動的にレンダリングし、複雑な購入フロー・レシート検証・サブスクリプション管理をすべて裏側で処理します。手動作成のペイウォール 🟡 中程度 アプリのコードでペイウォール UI を実装しますが、プロダクト提供の柔軟性を保つために Adapty からフローオブジェクトを取得します。ガイド をご覧ください。 オブザーバーモード 🔴 難しい 独自の購入処理インフラがすでにあり、そのまま使い続けたい場合に選択します。オブザーバーモードには Adapty での制限がある点に注意してください。記事 をご覧ください。
Important
以下の手順では、Adapty Flow & Paywall Builderで作成したフローを実装する方法を説明します。
ペイウォールのUIを自分でビルドする場合は、ペイウォールを手動で実装する をご覧ください。
Adapty Flow & Paywall Builderで作成したフローをアプリに表示するには、アプリのコードで以下の操作を行うだけです。
フローを取得する : Adaptyからフローを取得します。
表示するだけで購入はAdaptyが処理する : アプリにビューを表示します。
ボタンアクションを処理する : ユーザーの操作とアプリの応答を関連付けます。たとえば、ユーザーがボタンをクリックしたときにリンクを開いたり、フローを閉じたりします。
始める前に
始める前に、以下の手順を完了してください:
Adapty ダッシュボードでアプリを Google Play に接続する 。
Adapty でプロダクトを作成する 。
フローを作成 し、プロダクトを追加する 。
プレースメントを作成し、フローを追加する 。
アプリのコードに Adapty SDK をインストールして有効化する 。このガイドでは Adapty Android SDK v4 の API を使用します。
1. フローを取得する
フローはダッシュボードで設定されたプレースメントに関連付けられています。プレースメントを使用すると、異なるオーディエンスに対して異なるフローを実行したり、A/B テスト を実行したりできます。
Adapty Flow & Paywall Builder で作成したフローを取得するには、次の手順を実行します。
getFlow メソッドを使用してプレースメント ID から flow オブジェクトを取得し、ビュー設定が含まれているかどうかを確認します。
getFlowConfiguration メソッドを使用してビュー設定を取得します。ビュー設定には、フローを表示するために必要な UI 要素とスタイリングが含まれています。
Important
ビュー設定を取得するには、フローを公開 してください。未公開の編集があるフローは Dirty ステータスになり、そのプレースメントは最後に公開されたバージョンを引き続き配信します。
Adapty. getFlow ( "YOUR_PLACEMENT_ID" ) { result ->
if (result is AdaptyResult.Success) {
val flow = result. value
if ( ! flow.hasViewConfiguration) {
return @getFlow
}
AdaptyUI. getFlowConfiguration (flow) { configResult ->
if (configResult is AdaptyResult.Success) {
val flowConfiguration = configResult. value
}
}
}
}
Adapty. getFlow ( "YOUR_PLACEMENT_ID" , result -> {
if (result instanceof AdaptyResult.Success) {
AdaptyFlow flow = ((AdaptyResult.Success < AdaptyFlow > ) result). getValue ();
if ( ! flow. hasViewConfiguration ()) {
return ;
}
AdaptyUI. getFlowConfiguration (flow, configResult -> {
if (configResult instanceof AdaptyResult.Success) {
AdaptyUI.FlowConfiguration flowConfiguration =
((AdaptyResult.Success < AdaptyUI.FlowConfiguration > ) configResult). getValue ();
// 読み込んだ設定を使用する
}
});
}
});
2. フローを表示する
フローの設定が完了したら、数行追加するだけでフローを表示できます。
デバイス画面にビジュアルフローを表示するには、まず設定を行う必要があります。そのためには、AdaptyUI.getFlowView() メソッドを呼び出すか、AdaptyFlowView を直接作成してください:
val flowView = AdaptyUI. getFlowView (
activity,
flowConfiguration,
null , // products = null means auto-fetch
eventListener,
) val flowView =
AdaptyFlowView (activity) // or retrieve it from xml
.. .
with (flowView) {
showFlow (
flowConfiguration,
null , // products = null means auto-fetch
eventListener,
)
} AdaptyFlowView flowView = AdaptyUI. getFlowView (
activity,
flowConfiguration,
null , // products = null means auto-fetch
eventListener
); AdaptyFlowView flowView =
new AdaptyFlowView (activity); //add to the view hierarchy if needed, or you receive it from xml
...
flowView. showFlow (flowConfiguration, products, eventListener); < com.adapty.ui.AdaptyFlowView xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent" />
ビューが正常に作成されたら、ビュー階層に追加してデバイスの画面に表示できます。
Tip
フローの表示方法の詳細については、ガイド をご覧ください。
ユーザーがフロー内のボタンをタップすると、Android SDK は購入、リストア、フローのクローズ、リンクの開封を自動的に処理します。
ただし、カスタムIDまたは事前定義済みIDを持つボタンは、コード上でアクションを処理する必要があります。また、デフォルトの動作を上書きしたい場合もあるでしょう。
たとえば、以下はクローズボタンのデフォルト動作です。コードに追加する必要はありませんが、必要な場合にどのように実装するかを確認できます。
override fun onActionPerformed (action: AdaptyUI .Action, context: Context ) {
when (action) {
AdaptyUI.Action.Close -> (context as ? Activity)?. onBackPressed () // default behavior
}
} @ Override
public void onActionPerformed (@ NonNull AdaptyUI.Action action, @ NonNull Context context) {
if (action instanceof AdaptyUI.Action.Close) {
if (context instanceof Activity) {
((Activity) context). onBackPressed ();
}
}
}
次のステップ
Tip
ご質問やお困りのことがあれば、サポートフォーラム をご覧ください。よくある質問への回答を見つけたり、ご自身の質問を投稿することができます。チームとコミュニティがサポートいたします!
ペイウォールをアプリに表示する準備が整いました。Google Play Storeでのテスト購入 を行い、ペイウォールからテスト購入を完了できることを確認してください。
次に、適切なユーザーにペイウォールを表示したり有料機能へのアクセスを付与したりするために、ユーザーのアクセスレベルを確認する 必要があります。
完全な例
これらのすべてのステップをアプリに統合する方法を示します。
class MainActivity : AppCompatActivity () {
override fun onCreate (savedInstanceState: Bundle ?) {
super . onCreate (savedInstanceState)
Adapty. getFlow ( "YOUR_PLACEMENT_ID" ) { flowResult ->
if (flowResult is AdaptyResult.Success) {
val flow = flowResult. value
if ( ! flow.hasViewConfiguration) {
// Use custom logic
return @getFlow
}
AdaptyUI. getFlowConfiguration (flow) { configResult ->
if (configResult is AdaptyResult.Success) {
val flowConfiguration = configResult. value
val flowView = AdaptyUI. getFlowView (
this ,
flowConfiguration,
null , // products = null means auto-fetch
object : AdaptyFlowDefaultEventListener () {
override fun onActionPerformed (action: AdaptyUI .Action, context: Context ) {
when (action) {
is AdaptyUI.Action.Close -> {
(context as ? Activity)?. onBackPressed ()
}
}
}
}
)
setContentView (flowView)
}
}
}
}
}
}
public class MainActivity extends AppCompatActivity {
@ Override
protected void onCreate (Bundle savedInstanceState ) {
super . onCreate (savedInstanceState);
Adapty. getFlow ( "YOUR_PLACEMENT_ID" , flowResult -> {
if (flowResult instanceof AdaptyResult.Success) {
AdaptyFlow flow = ((AdaptyResult.Success < AdaptyFlow > ) flowResult). getValue ();
if ( ! flow. hasViewConfiguration ()) {
// Use custom logic
return ;
}
AdaptyUI. getFlowConfiguration (flow, configResult -> {
if (configResult instanceof AdaptyResult.Success) {
AdaptyUI.FlowConfiguration flowConfiguration =
((AdaptyResult.Success < AdaptyUI.FlowConfiguration > ) configResult). getValue ();
AdaptyFlowView flowView = AdaptyUI. getFlowView (
this ,
flowConfiguration,
null , // products = null means auto-fetch
new AdaptyFlowDefaultEventListener () {
@ Override
public void onActionPerformed (@ NonNull AdaptyUI.Action action , @ NonNull Context context ) {
if (action instanceof AdaptyUI.Action.Close) {
if (context instanceof Activity) {
((Activity) context). onBackPressed ();
}
}
}
}
);
setContentView (flowView);
}
});
}
});
}
}