Capacitor SDKでオンボーディングイベントを処理する

オンボーディングはSDK v4で非推奨となり、将来のリリースで削除される予定です。 バグ修正や改善は行われません。代わりにフローをご利用ください。オンボーディングはWebView内で動作しますが、フローはデバイス上でネイティブにレンダリングされるため、よりスムーズなアニメーション、一貫したネイティブな外観、高速な読み込み、WebViewランタイムへの依存がなくなります。まずはフローとペイウォールの取得フローとペイウォールの表示をご覧ください。

ビルダーで設定されたオンボーディングは、アプリが応答できるイベントを生成します。スタンドアロンの画面表示でこれらのイベントを処理するには、setEventHandlers メソッドを使用してください。

始める前に、以下を確認してください:

  1. オンボーディングを作成済みであること。
  2. オンボーディングをプレースメントに追加済みであること。

イベントハンドラーの設定

オンボーディングのイベントを処理するには、view.setEventHandlers メソッドを使用します。


try {
  const view = await createOnboardingView(onboarding);
  
  view.setEventHandlers({
    onAnalytics(event, meta) {
      console.log('Analytics event:', event);
    },
    onClose(actionId, meta) {
      console.log('Onboarding closed:', actionId);
      return true; // Allow the onboarding to close
    },
    onCustom(actionId, meta) {
      console.log('Custom action:', actionId);
      return false; // Don't close the onboarding
    },
    onPaywall(actionId, meta) {
      console.log('Paywall action:', actionId);
      view.dismiss().then(() => {
        openPaywall(actionId);
      });
    },
    onStateUpdated(action, meta) {
      console.log('State updated:', action);
    },
    onFinishedLoading(meta) {
      console.log('Onboarding finished loading');
    },
    onError(error) {
      console.error('Onboarding error:', error);
    },
  });
  
  await view.present();
} catch (error) {
  console.error('Failed to present onboarding:', error);
}

イベントの種類

以下のセクションでは、処理できるさまざまなイベントの種類を説明します。

カスタムアクションの処理

ビルダーでは、ボタンにカスタムアクションを追加してIDを割り当てることができます。

ios-events-1.webp

その後、このIDをコードで使用し、カスタムアクションとして処理できます。たとえば、ユーザーが LoginAllow notifications などのカスタムボタンをタップすると、ビルダーの Action ID と一致する actionId パラメータを持つイベントハンドラが呼び出されます。“allowNotifications” のような独自のIDを作成できます。

view.setEventHandlers({
  onCustom(actionId, meta) {
    switch (actionId) {
      case 'login':
        console.log('Login action triggered');
        break;
      case 'allow_notifications':
        console.log('Allow notifications action triggered');
        break;
    }
    return false; // Don't close the onboarding
  },
});
イベントの例(クリックして展開)
{
  "actionId": "allow_notifications",
  "meta": {
    "onboardingId": "onboarding_123",
    "screenClientId": "profile_screen",
    "screenIndex": 0,
    "screensTotal": 3
  }
}

オンボーディングの読み込み完了

オンボーディングの読み込みが完了すると、このイベントがトリガーされます:

view.setEventHandlers({
  onFinishedLoading(meta) {
    console.log('Onboarding loaded:', meta.onboardingId);
  },
});
イベントの例(クリックして展開)
{
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "welcome_screen",
        "screen_index": 0,
        "total_screens": 4
    }
}

オンボーディングを閉じる

ユーザーがCloseアクションが割り当てられたボタンをタップすると、オンボーディングは閉じられたとみなされます。

ios-events-2.webp

ユーザーがオンボーディングを閉じたときの処理は、ご自身で実装する必要があります。たとえば、オンボーディング自体の表示を停止する処理などが必要です。

view.setEventHandlers({
  onClose(actionId, meta) {
    console.log('Onboarding closed:', actionId);
    return true; // Allow the onboarding to close
  },
});
イベントの例(クリックで展開)
{
  "action_id": "close_button",
  "meta": {
    "onboarding_id": "onboarding_123",
    "screen_cid": "final_screen",
    "screen_index": 3,
    "total_screens": 4
  }
}

ペイウォールを開く

オンボーディング内でペイウォールを開きたい場合は、このイベントを処理してください。ペイウォールを閉じた後に別のペイウォールを開きたい場合は、もっとシンプルな方法があります。クローズアクションを処理して、イベントデータに依存せずにペイウォールを開いてください。

オンボーディングでペイウォールをシームレスに扱う方法は、アクション ID をペイウォールのプレースメント ID と同じにすることです。

iOSでは、一度に画面に表示できるビュー(ペイウォールまたはオンボーディング)は1つだけです。オンボーディングの上にペイウォールを表示した場合、バックグラウンドのオンボーディングをプログラムで操作することはできません。オンボーディングを閉じようとすると、代わりにペイウォールが閉じられ、オンボーディングが残ったままになります。これを防ぐため、ペイウォールを表示する前に必ずオンボーディングビューを閉じてください。

view.setEventHandlers({
  onPaywall(actionId, meta) {
    // ペイウォールを表示する前にオンボーディングを閉じる
    view.dismiss().then(() => {
      openPaywall(actionId);
    });
  },
});

async function openPaywall(placementId: string) {
  // ここにペイウォールを開くロジックを実装する
}
イベントの例(クリックして展開)
{
    "action_id": "premium_offer_1",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "pricing_screen",
        "screen_index": 2,
        "total_screens": 4
    }
}

ナビゲーションのトラッキング

オンボーディングフローの実行中にさまざまなナビゲーション関連イベントが発生すると、アナリティクスイベントを受け取ります。

view.setEventHandlers({
  onAnalytics(event, meta) {
    console.log('Analytics event:', event.type, meta.onboardingId);
  },
});

event オブジェクトは、以下のいずれかの型になります。

タイプ説明
onboardingStartedオンボーディングが読み込まれたとき
screenPresented任意の画面が表示されたとき
screenCompleted画面が完了したとき。オプションの elementId(完了した要素の識別子)とオプションの reply(ユーザーからの回答)を含む。ユーザーが画面を離れる操作を行ったときにトリガーされる。
secondScreenPresented2番目の画面が表示されたとき
userEmailCollected入力フィールドでユーザーのメールアドレスが収集されたときにトリガーされる
onboardingCompletedユーザーが final IDを持つ画面に到達したときにトリガーされる。このイベントが必要な場合は、最後の画面に final IDを割り当ててください
unknown認識できないイベントタイプの場合。name(不明なイベントの名前)と meta(追加のメタデータ)を含む
各イベントには以下のmeta情報が含まれます:
フィールド説明
onboardingIdオンボーディングフローの一意識別子
screenClientId現在のスクリーンの識別子
screenIndexフロー内の現在のスクリーンの位置
screensTotalフロー内のスクリーンの総数
イベントの例(クリックして展開)
// onboardingStarted
{
  "name": "onboarding_started",
  "meta": {
    "onboarding_id": "onboarding_123",
    "screen_cid": "welcome_screen",
    "screen_index": 0,
    "total_screens": 4
  }
}

// screenPresented
{
    "name": "screen_presented",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "interests_screen",
        "screen_index": 2,
        "total_screens": 4
    }
}

// screenCompleted
{
    "name": "screen_completed",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    },
    "params": {
        "element_id": "profile_form",
        "reply": "success"
    }
}

// secondScreenPresented
{
    "name": "second_screen_presented",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    }
}

// userEmailCollected
{
    "name": "user_email_collected",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "profile_screen",
        "screen_index": 1,
        "total_screens": 4
    }
}

// onboardingCompleted
{
    "name": "onboarding_completed",
    "meta": {
        "onboarding_id": "onboarding_123",
        "screen_cid": "final_screen",
        "screen_index": 3,
        "total_screens": 4
    }
}