iOS SDKでオンボーディングイベントを処理する
SDK v4 以降、オンボーディングのより強力な代替手段としてフローを構築できます。オンボーディングは WebView 内で動作しますが、フローはデバイス上でネイティブにレンダリングされるため、よりスムーズなアニメーション、一貫した iOS のルック&フィール、高速な読み込み、WebView ランタイムへの依存がなくなります。はじめるには、フロー&ペイウォールの取得とフロー&ペイウォールの表示をご覧ください。
始める前に、以下を確認してください:
- Adapty iOS SDK 3.8.0 以降をインストール済みであること。
- オンボーディングを作成済みであること。
- オンボーディングをプレースメントに追加済みであること。
ビルダーで設定したオンボーディングは、アプリが応答できるイベントを生成します。これらのイベントへの応答方法については、以下をご覧ください。
モバイルアプリ内のオンボーディング画面で発生するプロセスを制御・監視するには、AdaptyOnboardingControllerDelegate のメソッドを実装してください。
カスタムアクション
ビルダーでは、ボタンにカスタムアクションを追加し、IDを割り当てることができます。
その後、このIDをコードで使用してカスタムアクションとして処理できます。たとえば、ユーザーがLoginやAllow notificationsなどのカスタムボタンをタップすると、デリゲートメソッドonboardingControllerが.custom(id:)ケースでトリガーされ、actionIdパラメータはビルダーのAction IDになります。"allowNotifications"のように独自のIDを作成できます。
func onboardingController(_ controller: AdaptyOnboardingController, onCustomAction action: AdaptyOnboardingsCustomAction) {
if action.actionId == "allowNotifications" {
// Request notification permissions
}
}
func onboardingController(_ controller: AdaptyOnboardingController, didFailWithError error: AdaptyUIError) {
// Handle errors
}
イベントの例(クリックして展開)
{
"actionId": "allowNotifications",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "profile_screen",
"screenIndex": 0,
"screensTotal": 3
}
}オンボーディングを閉じる
ユーザーが Close アクションが割り当てられたボタンをタップすると、オンボーディングは閉じられたとみなされます。
ユーザーがオンボーディングを閉じたときの動作は、アプリ側で管理する必要があります。たとえば、オンボーディング自体の表示を停止する処理が必要です。
例:
func onboardingController(_ controller: AdaptyOnboardingController, onCloseAction action: AdaptyOnboardingsCloseAction) {
controller.dismiss(animated: true)
}
イベントの例(クリックして展開)
{
"action_id": "close_button",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "final_screen",
"screen_index": 3,
"total_screens": 4
}
}ペイウォールを開く
オンボーディング内でペイウォールを開きたい場合は、このイベントを処理してください。ペイウォールが閉じられた後に開きたい場合は、AdaptyOnboardingsCloseAction を処理してペイウォールをイベントデータに依存せず開く、というより簡単な方法があります。
オンボーディングでペイウォールをシームレスに扱うには、アクション ID をペイウォールのプレースメント ID と同じにするのがおすすめです。こうすることで、AdaptyOnboardingsOpenPaywallAction の後にプレースメント ID を使ってすぐにペイウォールを取得して表示できます。
注意: 画面上に表示できるビュー(ペイウォールまたはオンボーディング)は一度に1つだけです。オンボーディングの上にペイウォールを表示した場合、バックグラウンドのオンボーディングをプログラムで操作することはできません。オンボーディングを閉じようとすると、代わりにペイウォールが閉じられ、オンボーディングがそのまま表示された状態になります。これを避けるため、ペイウォールを表示する前に必ずオンボーディングビューを閉じてください。
func onboardingController(_ controller: AdaptyOnboardingController, onPaywallAction action: AdaptyOnboardingsOpenPaywallAction) {
// Dismiss onboarding before presenting the flow
controller.dismiss(animated: true) {
Task {
do {
// Get the flow using the placement ID from the action
let flow = try await Adapty.getFlow(placementId: action.actionId)
// Get the flow configuration
let flowConfiguration = try await AdaptyUI.getFlowConfiguration(
forFlow: flow
)
// Create and present the flow controller
let flowController = try AdaptyUI.flowController(
with: flowConfiguration,
delegate: self
)
// Present the flow from the root view controller
if let rootVC = UIApplication.shared.windows.first?.rootViewController {
rootVC.present(flowController, animated: true)
}
} catch {
// Handle any errors that occur during flow loading
print("Failed to present flow: \(error)")
}
}
}
}
イベント例(クリックして展開)
{
"action_id": "premium_offer_1",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "pricing_screen",
"screen_index": 2,
"total_screens": 4
}
}オンボーディングの読み込み完了
オンボーディングの読み込みが完了すると、次のメソッドが呼び出されます:
func onboardingController(_ controller: AdaptyOnboardingController, didFinishLoading action: OnboardingsDidFinishLoadingAction) {
// Handle loading completion
}
イベントの例(クリックして展開)
{
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "welcome_screen",
"screen_index": 0,
"total_screens": 4
}
}ナビゲーションのトラッキング
onAnalyticsEvent メソッドは、オンボーディングフロー中にさまざまなアナリティクスイベントが発生したときに呼び出されます。
event オブジェクトは次のいずれかの型になります。
| 型 | 説明 |
|---|---|
onboardingStarted | オンボーディングが読み込まれたとき |
screenPresented | いずれかの画面が表示されたとき |
screenCompleted | 画面が完了したとき。オプションの elementId(完了した要素の識別子)とオプションの reply(ユーザーからの応答)を含む。ユーザーが画面を終了するアクションを実行したときにトリガーされます。 |
secondScreenPresented | 2番目の画面が表示されたとき |
userEmailCollected | 入力フィールドからユーザーのメールアドレスが収集されたときにトリガーされます |
onboardingCompleted | ユーザーが final IDを持つ画面に到達したときにトリガーされます。このイベントが必要な場合は、最後の画面に final IDを割り当ててください。 |
unknown | 認識されないイベント型。name(不明なイベントの名前)と meta(追加のメタデータ)を含む |
各イベントには、以下の情報を含む meta が付与されます:
| フィールド | 説明 |
|---|---|
onboardingId | オンボーディングフローの一意の識別子 |
screenClientId | 現在の画面の識別子 |
screenIndex | フロー内での現在の画面の位置 |
screensTotal | フロー内の画面の総数 |
アナリティクスイベントをトラッキングに利用する例を以下に示します:
func onboardingController(_ controller: AdaptyOnboardingController, onAnalyticsEvent event: AdaptyOnboardingsAnalyticsEvent) {
switch event {
case .onboardingStarted(let meta):
// Track onboarding start
trackEvent("onboarding_started", meta: meta)
case .screenPresented(let meta):
// Track screen presentation
trackEvent("screen_presented", meta: meta)
case .screenCompleted(let meta, let elementId, let reply):
// Track screen completion with user response
trackEvent("screen_completed", meta: meta, elementId: elementId, reply: reply)
case .onboardingCompleted(let meta):
// Track successful onboarding completion
trackEvent("onboarding_completed", meta: meta)
case .unknown(let meta, let name):
// Handle unknown events
trackEvent(name, meta: meta)
// Handle other cases as needed
}
}
イベントの例(クリックして展開)
// 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
}
}