Unity SDKでオンボーディングイベントを処理する
始める前に、以下を確認してください:
- Adapty Unity SDK 3.14.0以降をインストール済みであること。
- オンボーディングを作成済みであること。
- オンボーディングをプレースメントに追加済みであること。
ビルダーで設定されたオンボーディングは、アプリが反応できるイベントを生成します。これらのイベントへの対応方法を以下で説明します。
Unityアプリ内のオンボーディング画面で発生するプロセスを制御・監視するには、AdaptyOnboardingsEventsListenerインターフェースを実装してください。
カスタムアクション
ビルダーでは、ボタンにカスタムアクションを追加してIDを割り当てることができます。
このIDをコード内で使用し、カスタムアクションとして処理できます。たとえば、ユーザーがログインや通知を許可などのカスタムボタンをタップすると、OnboardingViewOnCustomActionメソッドが呼び出され、actionIdパラメーターにビルダーで設定したアクションIDが渡されます。“allowNotifications”のような独自のIDを作成できます。
オンボーディングイベントを処理するには、AdaptyOnboardingsEventsListenerインターフェースを実装してください:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
void Start()
{
Adapty.SetOnboardingsEventsListener(this);
}
public void OnboardingViewOnCustomAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
if (actionId == "allowNotifications") {
// request notification permissions
}
}
public void OnboardingViewDidFailWithError(
AdaptyUIOnboardingView view,
AdaptyError error
)
{
// handle errors
}
// Implement other required interface methods (see examples below)
}
イベントの例(クリックして展開)
{
"actionId": "allowNotifications",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "profile_screen",
"screenIndex": 0,
"screensTotal": 3
}
}オンボーディングを閉じる
オンボーディングは、ユーザーが閉じるアクションが割り当てられたボタンをタップしたときに閉じられたとみなされます。
ユーザーがオンボーディングを閉じたときの動作を自分で管理する必要があります。たとえば、オンボーディング自体の表示を停止する処理が必要です。
クラスにOnboardingViewOnCloseActionメソッドを実装してください:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewOnCloseAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
view.Dismiss((error) => {
if (error != null) {
// handle the error
}
});
}
// ... other interface methods
}
イベントの例(クリックして展開)
{
"action_id": "close_button",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "final_screen",
"screen_index": 3,
"total_screens": 4
}
}ペイウォールを開く
オンボーディング内でペイウォールを開きたい場合は、このイベントを処理してください。オンボーディングが閉じた後にペイウォールを開く場合は、OnboardingViewOnCloseActionを処理してイベントデータに依存せずにペイウォールを開く方がシンプルです。
オンボーディングでペイウォールを扱う最もシームレスな方法は、アクションIDをペイウォールのプレースメントIDと同じにすることです。こうすることで、OnboardingViewOnPaywallActionの後にそのプレースメントIDを使ってすぐにペイウォールを取得して開くことができます。
iOS では、ペイウォールとオンボーディングのどちらか一方しか同時に表示できません。オンボーディングの上にペイウォールを表示した場合、バックグラウンドのオンボーディングをプログラムで制御することはできません。オンボーディングを閉じようとするとペイウォールが閉じられてしまい、オンボーディングがそのまま表示された状態になります。これを避けるため、ペイウォールを表示する前に必ずオンボーディングビューを閉じてください。
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewOnPaywallAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
// Dismiss onboarding before presenting paywall
view.Dismiss((dismissError) => {
if (dismissError != null) {
// handle the error
return;
}
Adapty.GetPaywall(actionId, (paywall, error) => {
if (error != null) {
// handle the error
return;
}
AdaptyUI.CreatePaywallView(paywall, (paywallView, createError) => {
if (createError != null) {
// handle the error
return;
}
paywallView.Present((presentError) => {
if (presentError != null) {
// handle the error
}
});
});
});
});
}
// ... other interface methods
}
イベントの例(クリックして展開)
{
"action_id": "premium_offer_1",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "pricing_screen",
"screen_index": 2,
"total_screens": 4
}
}オンボーディングの読み込み完了
オンボーディングの読み込みが完了したら、OnboardingViewDidFinishLoadingメソッドを実装してください:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewDidFinishLoading(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta
)
{
// handle loading completion
}
// ... other interface methods
}
イベントの例(クリックして展開)
{
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "welcome_screen",
"screen_index": 0,
"total_screens": 4
}
}ナビゲーションのトラッキング
OnboardingViewOnAnalyticsEventメソッドは、オンボーディングフロー中にさまざまな分析イベントが発生したときに呼び出されます。
analyticsEventオブジェクトは以下のいずれかの型になります:
| 型 | 説明 |
|---|---|
AdaptyOnboardingsAnalyticsEventOnboardingStarted | オンボーディングが読み込まれたとき |
AdaptyOnboardingsAnalyticsEventScreenPresented | 任意の画面が表示されたとき |
AdaptyOnboardingsAnalyticsEventScreenCompleted | 画面が完了したとき。オプションのElementId(完了した要素の識別子)とオプションのReply(ユーザーからの応答)を含みます。ユーザーが画面を離れるアクションを実行したときに発火します。 |
AdaptyOnboardingsAnalyticsEventSecondScreenPresented | 2番目の画面が表示されたとき |
AdaptyOnboardingsAnalyticsEventUserEmailCollected | 入力フィールドでユーザーのメールアドレスが収集されたとき |
AdaptyOnboardingsAnalyticsEventOnboardingCompleted | ユーザーがfinalIDを持つ画面に到達したときに発火します。このイベントが必要な場合は、最後の画面にfinalIDを割り当ててください。 |
AdaptyOnboardingsAnalyticsEventUnknown | 認識できないイベントタイプの場合。Name(不明なイベントの名前)とmeta(追加のメタデータ)を含みます。 |
各イベントには以下のmeta情報が含まれます:
| フィールド | 説明 |
|---|---|
OnboardingId | オンボーディングフローの一意識別子 |
ScreenClientId | 現在の画面の識別子 |
ScreenIndex | フロー内の現在の画面の位置 |
ScreensTotal | フロー内の総画面数 |
分析イベントをトラッキングに使用する例を以下に示します:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewOnAnalyticsEvent(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
AdaptyOnboardingsAnalyticsEvent analyticsEvent
)
{
switch (analyticsEvent) {
case AdaptyOnboardingsAnalyticsEventOnboardingStarted:
// track onboarding start
TrackEvent("onboarding_started", meta);
break;
case AdaptyOnboardingsAnalyticsEventScreenPresented:
// track screen presentation
TrackEvent("screen_presented", meta);
break;
case AdaptyOnboardingsAnalyticsEventScreenCompleted screenCompleted:
// track screen completion with user response
TrackEvent("screen_completed", meta, screenCompleted.ElementId, screenCompleted.Reply);
break;
case AdaptyOnboardingsAnalyticsEventOnboardingCompleted:
// track successful onboarding completion
TrackEvent("onboarding_completed", meta);
break;
case AdaptyOnboardingsAnalyticsEventUnknown unknownEvent:
// handle unknown events
TrackEvent(unknownEvent.Name, meta);
break;
// handle other cases as needed
}
}
// ... other interface methods
}
TrackEventメソッドは、お好みの分析サービスに分析データを送信するために自分で実装する必要があるプレースホルダーです。
イベントの例(クリックして展開)
// 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
}
}