Skip to main content

概要

このチュートリアルでは、単一のHTML アプリ内メッセージを使用してマルチステップのオンボーディングカルーセルを作成する方法を説明します。スワイプジェスチャーに依存する従来のカルーセルとは異なり、このアプローチはボタン駆動のナビゲーションを使用し、すべてのステップを1つのメッセージ内に保持します。 構築する内容:
  • 画像、テキスト、ボタンを含む2ステップのオンボーディングフロー
  • ボタンナビゲーション(「次へ」をタップして進む、「始める」をタップして閉じる)
  • 進行状況インジケータードット
  • ステップ間のスムーズなフェード遷移
画像、テキスト、次へボタンを含むウェルカム画面を表示するオンボーディングカルーセル

ボタン駆動ナビゲーションを使用したオンボーディングカルーセルの例

このアプローチを使用する場合:
  • ユーザーを短いオンボーディングまたは教育フロー(2-5ステップ)を通じてガイドする
  • ユーザーに続行するために明示的にボタンをタップさせる必要がある(スワイプジェスチャーなし)
  • すべてを1つのHTML アプリ内メッセージ内に保持してシンプルにする
  • フローが完了したときにメッセージを自動的に閉じる
このガイドでは完全なコントロールのためにHTML アプリ内メッセージを使用します。ドラッグアンドドロップエディタでカードベースのオンボーディングフローを構築することもできます—それらのカードはスワイプ可能ですが、カスタマイズ性は低くなります。

前提条件

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

マルチステップフローの仕組み

コードに入る前に、技術的なアプローチを理解することが重要です。この実装は1つのHTML アプリ内メッセージを使用し、複数の別々のメッセージをロードするのではなく、コンテンツの表示と非表示によってステップを切り替えます。 アーキテクチャは4つのコアコンポーネントに依存しています:
1

各ステップのカードコンテナ

各ステップはcardクラスと一意のIDを持つ<div>でラップされています:
  • すべてのカードは同時にDOMに存在します
  • 一度に1枚のカードのみが表示されます(activeクラスで制御)
2

CSS可視性コントロール

CSSは透明度とポインターイベントを使用して表示/非表示ロジックを処理します:
これが重要な理由:
  • opacity: 0はカードを視覚的に非表示にしますが、レイアウトには残ります
  • pointer-events: noneは非表示カードへの誤クリックを防止します
  • transitionはスムーズなフェード効果を作成します
3

JavaScript状態管理

setActive(i)関数がどのカードを表示するかを制御します:
この関数は:
  • すべてのカードからactiveを削除
  • ターゲットカードにactiveを追加
  • 進行状況インジケータードットを更新
4

ボタンイベントリスナー

ボタンがナビゲーションまたは終了をトリガーします:
重要: OneSignalIamApi.close(e)はHTML内からアプリ内メッセージを閉じるOneSignal SDKメソッドです。
重要なポイント: これはアプリ内メッセージ内の**シングルページアプリケーション(SPA)**パターンです。すべてのコンテンツは一度ロードされ、JavaScriptがリロードなしで状態変更を管理します。

ステップ1:新しいHTML アプリ内メッセージを作成

  1. OneSignalダッシュボードで、Messages → In-App Messagesに移動します
  2. New In-App Messageをクリックします
  3. メッセージタイプとしてHTMLを選択します
  4. Full ScreenまたはLargeレイアウトを選択します(視覚的インパクトを最大化するためオンボーディングに推奨)
  5. HTMLエディタに進みます
HTMLエディタのプレビューはランタイムの動作を完全に反映しない場合があります。アニメーション、ボタンの動作、閉じるアクションを確認するために、必ず実際のデバイスまたはテストユーザーでテストしてください。

ステップ2:HTMLテンプレートを追加

エディタの内容を以下のテンプレートに置き換えます。このテンプレートには以下が含まれます:
  • 自己完結型コード: すべてのHTML、CSS、JavaScriptが1つのファイルに
  • ボタン駆動ナビゲーション: スワイプジェスチャーなし(デバイス間でより信頼性が高い)
  • フェード遷移: ステップ間のスムーズな透明度変化
  • OneSignal SDK統合: メッセージを閉じるためにOneSignalIamApi.close(e)を使用
  • モバイル最適化: viewportメタタグを使用したレスポンシブレイアウト

ステップ3:コンテンツをカスタマイズ

安全にカスタマイズできる項目

機能を壊さずにこれらの要素を変更できます: コンテンツ:
  • <h1>タグ内の見出しテキスト
  • <p>タグ内の本文コピー
  • ボタンラベル(次へ始める
  • background-image: url('...')スタイル内の画像URL
視覚的スタイル:
  • 色:.btnの背景、テキストカラー、またはドットの色を変更
  • 間隔:パディングとマージンを調整
  • タイポグラフィ:font-family、font-size、font-weightを変更
  • 角丸:ボタンと画像のborder-radius値を更新

ステップを追加

3番目のステップを追加するには、次のパターンに従います:
  1. HTMLカードを追加:
  1. 進行状況ドットを追加:
  1. setActive()関数を更新:
  1. 前のステップのボタンIDを更新: カード1のボタンでid="done"id="next-1"に変更し、クリックリスナーを追加:
  1. 新しい最後のカード(card-2)に閉じるボタンを追加:
オンボーディングフローは短く保ちましょう(最大2-4ステップ)。ユーザーは長いフローではすぐに離脱します。クリックトラッキングで完了率をテストしてください。

ステップ4:アプリ内メッセージをテスト

テストチェックリスト

  1. OneSignalダッシュボードでメッセージを保存
  2. 配信設定を構成:
    • トリガー条件を設定(例:セッション開始、特定のページビュー)
    • ターゲットオーディエンスを選択するか、テストユーザーを選択
  3. テストデバイスに送信:
    • テストユーザーを使用して本番ユーザーに影響を与えずにプレビュー
    • 物理デバイスにアプリをインストール(正確な動作のためシミュレーターより推奨)
  4. 機能を確認:
    • ✓ 最初のカードが正しいコンテンツで表示される
    • ✓ 「次へ」ボタンがカード2に進む
    • ✓ 進行状況ドットが正しく更新される
    • ✓ フェード遷移がスムーズ
    • ✓ 「始める」ボタンがメッセージを閉じる
    • ✓ メッセージがすぐに再表示されない(頻度制限設定を確認)
シミュレーター/エミュレーターは、特にタッチ操作やSDK統合において、実際のデバイスの動作を正確に反映しない場合があります。本番環境にリリースする前に、必ず物理デバイスでテストしてください。

一般的な問題のトラブルシューティング


次のステップ

ユーザーエンゲージメントをトラッキング:
  • ステップ間の離脱を測定するためにdata-onesignal-unique-label属性を使用してクリックトラッキングを追加(テンプレートに既に含まれています)
  • Messages → In-App Messages → [あなたのメッセージ] → Analyticsでクリック分析を表示
エクスペリエンスをパーソナライズ: 高度なカスタマイズ:
  • 終了後にユーザーを特定の画面にディープリンク
  • Liquid構文を使用してユーザー名や属性で見出しをパーソナライズ
  • 完了率を最適化するために異なるオンボーディングフローでA/Bテストを実装