アクション
Interactions パネルでは、タップ、要素の表示、フォーム送信などのイベントに対して、フロー要素がどのように応答するかを定義できます。各イベントに対して、画面間の移動、要素の表示・非表示、URL を開く、変数の設定など、1 つ以上のアクションを割り当てます。条件を使えば、ユーザーデータに基づいてフローをカスタマイズできます。
各インタラクションは 3 つのチェーンで構成されています。
- 要素(Element): インタラクションを開始する画面コンポーネント — ボタン、クイズの回答、入力フィールドなど。
- トリガー(Trigger): ロジックを起動するイベント — タップ、要素の表示、フォームの送信など。
- アクション(Action): トリガーに応じてフローが実行するタスク。1つのトリガーで複数のアクションを順番に実行できます。
インタラクションの設定
インタラクションを設定するには、次の手順に従います。
- 画面上または Layers パネルで要素を選択します。
- 右側の Interactions パネルに切り替え、Add trigger をクリックします。
- Button triggers セクションで、トリガーのタイプを選択します。
- Add action をクリックし、アクション名をクリックして、Edit action ウィンドウのドロップダウンからアクションのタイプを選択します。
- 選択したアクションタイプに基づいて、アクションのプロパティを設定します。
- 必要に応じて、Add action をクリックして同じトリガーにアクションを追加します。
トリガーの種類
トリガーは、ユーザーの操作、要素の状態変化、または画面の読み込みに反応して発火します。On screen appear はすべての要素に対して使用できる汎用トリガーです。それ以外はすべて特定の要素に紐づいたトリガーです。
| トリガー | 発火タイミング | 対応要素 |
|---|---|---|
| On screen appear | 画面が読み込まれたとき | すべての要素 |
| On tap | ユーザーが要素をタップしたとき | ボタン、クイズオプション、トグル、カウントダウン、動画 |
| On changed | ユーザーが入力値を変更したとき(テキスト入力、日付・時刻の選択) | すべての入力要素 |
| On submit | ユーザーがキーボードのEnterまたは完了を押してテキスト入力を送信したとき | テキスト系入力要素 |
| On timer end | カウントダウン要素がゼロに達したとき | カウントダウン |
| On playback finished | 動画が最後まで再生されたとき | 動画 |
| インタラクションが組み込まれていない要素(ローダーなど)では、On screen appear が唯一利用可能なトリガーです。 |
アクションの種類
画面を切り替えるナビゲーション系のアクションは、常にアクションリストの最後に配置してください。その後に配置されたアクション(「変数の設定」など)は、すでに画面が切り替わっているため実行されない場合があります。
画面への遷移
これはユーザーを画面間で移動させるための主要なアクションです。指定した遷移先の画面にユーザーを誘導します。
このアクションでは、遷移先の画面を設定するだけで十分です。動的なナビゲーションを有効にしたい場合は、ナビゲーションと分岐または条件付きアクションセクションをご覧ください。
次の画面に進む
フロー内の画面順序に従って、ユーザーを次の画面に進めます。エディターでの画面の並び順がそのまま表示順になる、リニアなフローに適しています。
前の画面に戻る
シーケンス上の前の画面ではなく、ナビゲーション履歴上の前の画面にユーザーを戻します。
URLを開く
テキストにリンクを埋め込む場合は、インラインリンクを使用してください。
指定したウェブアドレスを開きます。アプリのネイティブ画面外のウェブページ、記事、SNSプロフィールなどにユーザーを誘導する際に使用します。 このアクションでは、以下の2つの設定を行えます:
- URL address:URLアドレスを設定します。また、動的にすることも可能です。たとえば、クイズの回答に基づいて異なるページへ誘導したり、ユーザーが入力したデータを活用したりできます。設定するには、
をクリックして使用する変数を選択してください。 - Open in external browser:外部リンクを開く場所を指定します。デフォルトではアプリ内ブラウザで開き、ユーザーがアプリ内に留まるようになっています。外部ブラウザで開きたい場合は、Open in external browser チェックボックスを選択してください。
フローを閉じる
現在のフローを閉じます。
要素の表示/非表示
画面上の特定の要素を表示または非表示にします。
このアクションは、Design パネルの Visibility で設定された初期状態を上書きします。Visibility が Hide に設定されている場合、Show アクションを使うと要素が表示されます。
対象要素が指定されていない Show または Hide アクションがあると、プレビューと公開がブロックされます。対象を選択するか、アクションを削除してください。
アラートを表示する
ネイティブのシステムポップアップウィンドウを表示します。ユーザーは Ok をタップして続行する必要があります。
アラートには、Title と Message を設定する必要があります。どちらにも、変数を使ってコンテンツを動的にすることができます。変数を使用するには、
をクリックして、使用したい変数を選択してください。
設定が空または不完全な Show alert アクションは、プレビューと公開をブロックします。両方のフィールドに入力するか、アクションを削除してください。
変数を設定する
フロー内の変数の値を更新します。このアクションを追加する前に、左側の Variables パネルで変数を作成してください(変数を参照)。
Add variable をクリックして、必要な数だけ変数とその値を設定します。
割り当てのない Set variable アクションは、プレビューと公開をブロックします。少なくとも1つの割り当てを設定するか、アクションを削除してください。
購入
オンボーディング内のボタンやインタラクションから直接購入フローを起動します。フローを離れることなく、ユーザーがサブスクリプションに登録したりプロダクトを購入したりできるようにします。 このアクションには、2つの動作を設定できます:
- In-app store:ネイティブ購入を開始します。Product に特定のプロダクトを設定するか、画面上でユーザーが現在選択しているプロダクトを使用する場合は
products.selectedProductを設定します。 - Web payment:ネイティブ購入をトリガーする代わりに、ユーザーをウェブペイウォールに送ります。ウェブベースのサブスクリプションオファーなど、アプリ外でトランザクションを処理したい場合に使用します。
ターゲットのプロダクトまたはWeb Paywall URLが設定されていないPurchaseアクションは、プレビューおよび公開をブロックします。ターゲットを割り当てるか、アクションを削除してください。
購入を復元する
デバイス上で購入の復元フローを起動します。ユーザーが別のデバイスで以前に購入したサブスクリプションや、アプリを再インストールした後にアクセス権を回復したい場合に使用します。
このアクションに設定項目はありません。復元はAdaptyがネイティブのストアフローを通じて処理します。
Restore purchases アクションは、Links ボタンプリセットの Restore リンクにもあらかじめ設定されています(購入の設定を参照)。
カスタムアクション
カスタムアクションは、自分のアプリコードが処理する Action ID という名前のアクションを発火させます。組み込みのアクションタイプでは対応できない場合に使用します。
Adapty がトリガーを提供し、アプリが実際の動作を実装します:
- ビルダーで、要素のインタラクションに Action ID を割り当てます。
- ユーザーがそのインタラクションを起こすと、フローがそのIDをアプリに渡します。
- アプリはIDを照合し、対応するコードを実行します。
カスタムアクションを設定する
- Edit action ウィンドウで、Action ID を割り当てます。これはアプリが認識する文字列です(例:
show_discount)。 - アプリのコードで、この Action ID に対応するハンドラーを実装します。実装の詳細とコード例については、ペイウォールアクションの処理を参照してください。
Action ID が設定されていない Custom アクションは、プレビューと公開をブロックします。Action ID を割り当てるか、アクションを削除してください。
カスタムアクションでできること
カスタムアクション自体は何もしません。ビルダーで静的なアクション ID を設定し、そのIDを受け取ったときの処理はアプリのコードが担います。以下のユースケースはすべて同じパターンです。フローでIDを割り当て、コードで処理する。
- アプリ内イベントのトリガー:
viewed_special_offerなどのIDを発火させ、アプリがそれを受け取ったときにアナリティクスへイベントを記録します。 - システム権限のリクエスト:
request_locationなどのIDを発火させ、アプリからOSの権限プロンプトを呼び出します。プロンプトで付与できない権限の場合は、スマートフォンのシステム設定を開いてください。プロンプトを表示するのはAdaptyではなく、あなたのアプリです。 - ネイティブ認証の開始:
login_googleなどのIDを発火させ、独自のログイン画面を表示します。フローはユーザーをサインインさせることができません。 - ビジネスロジックの適用:
apply_discountなどのIDを発火させ、コンテンツをアンロックしたり、アプリの状態を変更したりします。 - クイズの回答をアプリに渡す: 各選択肢に異なるアクションIDを割り当て(例:
goal_weight_loss、goal_muscle)、コード内でそのIDを読み取ります。このIDを使ってカスタムユーザー属性を設定し、後からセグメント化できます。アクションが持つのは固定のIDのみなので、選択内容を伝える唯一の方法がこれです。フローは選択された値を送信することができません。
カスタムアクションは、ユーザーがオプションを選択した瞬間に発火します。ユーザーが回答を変更した場合、フローは新しいアクション ID も発火します。アプリはその両方を順番に受け取ります(例:goal_weight_loss、次に goal_muscle)。最後のシグナルが優先されるよう、ハンドラーをべき等にしてください。
カスタムアクションでできないこと
カスタムアクションは静的です。アクション ID はフローをビルドする際に固定されるため、変数やユーザー入力を読み取ることはできません。アクションが発火したとき、アプリが受け取るのはその ID のみであり、ユーザーが入力したメールアドレスや電話番号などの情報は一切渡されません。入力フィールドは、分岐やパーソナライゼーションのための変数としてフロー内に留まります。これらの値をアプリで利用するには、独自の UI や API を通じて収集してください。 カスタムアクションも一方向です。アプリがフローに結果を返すことはできず、フローはあなたのコードの完了を待ちません。カスタムアクションの後に Navigate next アクションが続く場合、コードが失敗しても(たとえばユーザーがログイン画面をサインインせずに閉じた場合でも)、ユーザーは次の画面に進みます。静的な Action ID と組み合わせると、アプリ側でのユーザー入力の検証(たとえばユーザーが入力した SMS コードを確認して結果に応じて分岐する)は行えません。フローの続きがコードの実行結果に依存する場合は、フローを2つのプレースメントに分割してください。
結果に基づいてフローを継続する
カスタムアクションが成功した場合にのみ表示されるべき画面がある場合(例:ログイン後に続く画面)、フローを2つのプレースメントに分割し、2番目の部分をいつ表示するかはアプリ側で判断します:
- 最初のプレースメントで、カスタムアクション(例:
login)で終わるフローを作成します。 - アプリ側でアクションIDを処理します:ログイン画面を表示し、ユーザーがサインインしたかどうかを確認します。
- ユーザーがサインインした場合、2番目のプレースメントのフローを続きの画面とともに表示します。 このようにすることで、フローが結果に関係なく画面を進めてしまうのではなく、実際の処理結果に基づいてアプリ側で画面遷移を制御できます。
条件付きアクション
条件付きアクションを使うと、ユーザーデータに基づいてフローを異なるパスに分岐させることができます。
よくある使用例を以下に挙げます。
- スクリーン上にクイズがあり、回答に応じて異なるスクリーンへ誘導したい場合。この場合は、ボタンに条件付きアクションを追加します。
- ユーザーグループごとに異なるプロダクトやオファーを提示したい場合。それぞれ別のスクリーンに配置し、ナビゲーションボタンに条件を設定します。
- 前回のアプリセッションでチュートリアルを完了済みのユーザーに対して、特定のステップをスキップしたい場合。 条件アクションは if / else-if / else チェーンのように機能します。アプリはルールを上から下へ順番に読み取り、最初に一致した条件で処理を停止します。
- IF: フローがメインの条件をチェックします。
- True の場合?フローは THEN アクションをすぐに実行し、停止します。
- False の場合?フローは次のセクションにスキップします。
- ELSE IF: ここに追加のチェックを設定できます(例:「プレミアムでない場合、ユーザーはトライアル中か?」)。
- ELSE(フォールバック): 上記のいずれのルールにも一致しなかった場合、フローはこの最後のセクションのアクションを実行します。
- ルールが追加されていても、アクションが割り当てられていない場合、条件に一致しても何も実行されません。
- 不完全なルール(オペレーターや値が設定されていない)はプレビューや公開をブロックします。
各ルールに対して、評価する変数とアクションを選択してください。1つのルールに複数のアクションを設定することもできます。
フローが実行するのは、最初に一致した1つのルールのみです。IF と ELSE IF を同時に実行する必要がある場合は、両方のアクションを IF に追加してください。
要素を選択可能にしたり、条件で使用するためにグループ化する方法については、選択可能な要素とグループを参照してください。
トラブルシューティング
必須フィールドが未入力の場合、プレビューや公開がブロックされます。詳細はフローの保存と公開をご覧ください。