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

ボタン駆動ナビゲーションを使用したオンボーディングカルーセルの例
- ユーザーを短いオンボーディングまたは教育フロー(2-5ステップ)を通じてガイドする
- ユーザーに続行するために明示的にボタンをタップさせる必要がある(スワイプジェスチャーなし)
- すべてを1つのHTML アプリ内メッセージ内に保持してシンプルにする
- フローが完了したときにメッセージを自動的に閉じる
このガイドでは完全なコントロールのためにHTML アプリ内メッセージを使用します。ドラッグアンドドロップエディタでカードベースのオンボーディングフローを構築することもできます—それらのカードはスワイプ可能ですが、カスタマイズ性は低くなります。
前提条件
開始する前に、以下を確認してください:- アプリ内メッセージが有効になっているアクティブなOneSignalアプリ
- HTML アプリ内メッセージを作成または編集する権限
- モバイルアプリにMobile SDKがインストールされている
- HTML、CSS、JavaScriptの基本的な理解
マルチステップフローの仕組み
コードに入る前に、技術的なアプローチを理解することが重要です。この実装は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 アプリ内メッセージを作成
- OneSignalダッシュボードで、Messages → In-App Messagesに移動します
- New In-App Messageをクリックします
- メッセージタイプとしてHTMLを選択します
- Full ScreenまたはLargeレイアウトを選択します(視覚的インパクトを最大化するためオンボーディングに推奨)
- HTMLエディタに進みます
HTMLエディタのプレビューはランタイムの動作を完全に反映しない場合があります。アニメーション、ボタンの動作、閉じるアクションを確認するために、必ず実際のデバイスまたはテストユーザーでテストしてください。
ステップ2:HTMLテンプレートを追加
エディタの内容を以下のテンプレートに置き換えます。このテンプレートには以下が含まれます:- 自己完結型コード: すべてのHTML、CSS、JavaScriptが1つのファイルに
- ボタン駆動ナビゲーション: スワイプジェスチャーなし(デバイス間でより信頼性が高い)
- フェード遷移: ステップ間のスムーズな透明度変化
- OneSignal SDK統合: メッセージを閉じるために
OneSignalIamApi.close(e)を使用 - モバイル最適化: viewportメタタグを使用したレスポンシブレイアウト
完全なHTMLテンプレートを表示
完全なHTMLテンプレートを表示
ステップ3:コンテンツをカスタマイズ
安全にカスタマイズできる項目
機能を壊さずにこれらの要素を変更できます: コンテンツ:<h1>タグ内の見出しテキスト<p>タグ内の本文コピー- ボタンラベル(
次へ、始める) background-image: url('...')スタイル内の画像URL
- 色:
.btnの背景、テキストカラー、またはドットの色を変更 - 間隔:パディングとマージンを調整
- タイポグラフィ:font-family、font-size、font-weightを変更
- 角丸:ボタンと画像の
border-radius値を更新
ステップを追加
3番目のステップを追加するには、次のパターンに従います:- HTMLカードを追加:
- 進行状況ドットを追加:
setActive()関数を更新:
- 前のステップのボタンIDを更新:
カード1のボタンで
id="done"をid="next-1"に変更し、クリックリスナーを追加:
- 新しい最後のカード(card-2)に閉じるボタンを追加:
ステップ4:アプリ内メッセージをテスト
テストチェックリスト
- OneSignalダッシュボードでメッセージを保存
- 配信設定を構成:
- トリガー条件を設定(例:セッション開始、特定のページビュー)
- ターゲットオーディエンスを選択するか、テストユーザーを選択
- テストデバイスに送信:
- テストユーザーを使用して本番ユーザーに影響を与えずにプレビュー
- 物理デバイスにアプリをインストール(正確な動作のためシミュレーターより推奨)
- 機能を確認:
- ✓ 最初のカードが正しいコンテンツで表示される
- ✓ 「次へ」ボタンがカード2に進む
- ✓ 進行状況ドットが正しく更新される
- ✓ フェード遷移がスムーズ
- ✓ 「始める」ボタンがメッセージを閉じる
- ✓ メッセージがすぐに再表示されない(頻度制限設定を確認)
シミュレーター/エミュレーターは、特にタッチ操作やSDK統合において、実際のデバイスの動作を正確に反映しない場合があります。本番環境にリリースする前に、必ず物理デバイスでテストしてください。
一般的な問題のトラブルシューティング
次のステップ
ユーザーエンゲージメントをトラッキング:- ステップ間の離脱を測定するために
data-onesignal-unique-label属性を使用してクリックトラッキングを追加(テンプレートに既に含まれています) - Messages → In-App Messages → [あなたのメッセージ] → Analyticsでクリック分析を表示
- オンボーディングを完了したユーザーにタグを付ける(例:
onboarding_completed: true) - タグを使用してユーザーをセグメント化し、オンボーディングフローの再表示を防止
- ユーザーデータを追加して将来のメッセージでコンテンツをパーソナライズ