キャンバス アプリを、Azure Monitor の機能である Application Insights に接続します。 Application Insights には、問題を診断し、アプリでのユーザーの行動を理解するのに役立つ分析ツールが含まれています。 収集した情報を使用して、より適切なビジネス上の意思決定を行い、アプリの品質を向上させます。
前提条件
- Azure ポータル にアクセスできる必要があります。
- Azure リソースを作成する へのアクセス許可が必要です。
注意
テレメトリ情報を表示するには、テナント管理者がキャンバス アプリのインサイトを有効にする必要があります。 Power Platform 管理センター に管理者としてサインインします。 設定>テナント設定>キャンバス アプリのインサイトを選択します。 キャンバス アプリのインサイト ウィンドウで、トグルをオンにして変更を保存します。 詳細については、テナントの設定 を参照してください。
Application Insights リソースの作成
イベントを格納する Application Insights リソースを作成することで、システム生成ログをアプリから送信します。
Azure ポータルで Application Insights 用のワークスペースベースのリソースを作成する方法について確認する。
アプリを Application Insights に接続する
注意
- 接続文字列を指定するときは、テナント間でデータを送信できることに注意してください。 トレース イベントは、アプリ用に設定した接続文字列に対応する App Insights リソースに送信されます。これは、ターゲットの App Insights インスタンスがアプリとは異なるテナントにある場合でも適用されます。
- App Insights の接続文字列が存在する可能性があるため、既存の .msapp ファイルをインポートするときは注意してください。 インポート後にアプリを手動で開いて、正しい App Insights 接続文字列が使用されていることを確認します。
Power Apps にサインインします。
アプリを開き、編集 を行います。
左側のナビゲーション ツリー ビューで App オブジェクトを選択し、Application Insights のリソースから接続文字列を貼り付けます。
アプリを保存および公開します。
別のスクリーンによって公開されているアプリを再生および参照します。
アプリの画面を閲覧すると、イベントが自動的に Application Insights に記録されます。 これには、次のような使用状況の詳細が含まれます。
- ユーザーのアプリのアクセス元
- ユーザーが使用するデバイス
- ユーザーが使用するブラウザーの種類
重要
公開されているアプリを再生して Application Insights にイベントを送信します。 Power Apps Studio でアプリをプレビューした場合、イベントは Application Insights に送信しません。
Application Insights でイベントを表示する
Azure Portal にサインインし、前述の手順で作成した Application Insights リソースを開きます。
左側のナビゲーション ウィンドウで、使用セクションの ユーザーを選択します。
注意
ユーザー ビューには、次のようなアプリの使用詳細が表示されます:
- アプリを表示したユーザーの数
- ユーザー セッションの数
- ログされたイベントの数
- ユーザーのオペレーティング システムおよびブラウザー バージョンの詳細
- ユーザーのリージョンと場所
ユーザーセッションを選択すると、セッションの長さやアクセスした画面など、特定の詳細が表示されます。
左側のナビゲーション ウィンドウで、使用セクションの イベントを選択します。 すべてのアプリ セッションの間で表示されたすべてのスクリーンの概要を参照できます。
カスタム トレース イベントを作成する
カスタム トレースを Application Insights に記述してアプリに固有の情報を分析します。 トレース 機能を使用すると以下を収集できます。
- スクリーンのコントロールの詳細な使用情報
- アプリにアクセスしている特定のユーザー
- 発生したエラー
トレースは、ユーザーがアプリを閲覧してアクションを実行したときに情報の証跡を送信することで、問題の診断に役立ちます。 Application Insights に送信されたトレース メッセージには、次の 3 つの重大度のいずれかが割り当てられています。
- 情報
- 警告
- Error
状況に応じて適切な重大度のトレース メッセージを送信します。 データをクエリし、および重大度に基づいて特定のアクションを実行できます。
ヒント
個人データを記録する場合は、さまざまなプライバシー法および規制に関する義務に注意してください。 詳細については、 Microsoft セキュリティ センター および Service Trust Portal を参照してください。
アプリ内にコンポーネントを作成して、各画面に関するフィードバックを収集し、イベントを Application Insights に記録します。
Power Apps にサインインします。
左側のナビゲーション ウィンドウで、アプリを選択します。 アプリのリストから Kudos アプリを選択し、次に編集を選択します。
ツリー ビュー で、コンポーネント を選択します:
新しいコンポーネントを選択し、次に幅を 200、高さを 75 にサイズ変更します:
メニューから挿入を選択し、次にアイコンを選択して絵文字 - しかめっ面アイコンおよび絵文字 - 笑顔アイコンを選択します。
新しいカスタム プロパティを選択して、カスタム プロパティを作成します。
FeedbackSceen などのプロパティ名および表示名を入力します。
プロパティの内容を入力します。
プロパティの種類を入力、およびデータ型をスクリーンとして選択します。
注意
プロパティを入力すると、スクリーン名およびそのコンポーネントを取り込むことができるので、Application Insights にこの情報を記録することができます。
ツリー ビューのコンポーネントを選択し、その他の操作 (...) を選択して、名前の変更を選択し、FeedbackComponent などのわかりやすい名前にコンポーネントの名前を変更をします。
アイコンを選択し、その他の操作 (...)、名前の変更を選択して FrownIcon や SmileIcon などのわかりやすい名前にアイコンの名前を変更します。
FrownIcon を選択し、OnSelect プロパティを選択し、数式バーに次のような式を入力します。
Trace( "App Feedback", TraceSeverity.Information, { UserName: User().FullName, UserEmail: User().Email, Screen: FeedbackComponent.FeedbackScreen.Name, FeedbackValue: "-1" } ); Notify("Thanks for your feedback!");
注意
数式はユーザー名、UserEmail、スクリーン、およびフィードバック (値が -1) を Application Insights に送信します。
SmileIcon を選択し、OnSelect プロパティを選択し、次に数式バーに次のような式を入力します。
Trace( "App Feedback", TraceSeverity.Information, { UserName: User().FullName, UserEmail: User().Email, Screen: FeedbackComponent.FeedbackScreen.Name, FeebackValue: "1" } ); Notify("Thanks for your feedback!");
アプリのいずれかの画面にコンポーネントを追加します。
保存を選択し、次に公開を選択してアプリを保存および公開します。
公開されたアプリを再生し、スクリーンから笑顔およびしかめっ面フィードバックを送信します。
重要
Application Insights にイベントを送信するには公開されているアプリを再生する必要があります。 Power Apps Studio でアプリをプレビューした場合、イベントは Application Insights に送信されません。
Application Insights でカスタム データを分析する
これで、Application Insights でアプリからトレース 機能を使用して送信したデータの分析を開始することができます。
Azure ポータルにサインインし、先ほど作成した Application Insights のリソースを開きます。
左側のナビゲーション ウィンドウで、監査の下のログを選択します。
次のクエリを入力し、 実行 を選択して、アプリからのフィードバックを表示します。
traces | where message == "App Feedback" | order by timestamp
結果の行を選択し、customDimensions フィールドを展開します。
コンポーネントの中の笑顔またはしかめっ面アイコンの OnSelect イベントのためのスクリーン、ユーザー名、UserEmail、および FeedbackValue の値が記録されました。 appId、appName、および appSessionId など、Application Insights に送信される各イベントに対も値が記録されます。
次のクエリ例を使用して、JSON カスタム ディメンションのプロパティを拡張し、および結果ビューに列を表示できます。
traces | extend customdims = parse_json(customDimensions) | where message == "App Feedback" | project timestamp , message , AppName = customdims.['ms-appName'] , AppId = customdims.['ms-appId'] , FeedbackFrom = customdims.UserEmail , Screen = customdims.Screen , FeedbackValue = customdims.FeedbackValue | order by timestamp desc
ヒント
ログ クエリは非常に強力です。 これらを使用して、複数のテーブルを結合し、大量のデータを集計し、および複雑な操作を実行できます。 ログ クエリに関する詳細情報。
Application Insights でアプリのライフサイクル データを分析する
セッション概要イベントは、セッションごとに 1 回ログに記録され、アプリ起動の成功、アプリ起動の最適セッションと非最適セッション、アプリ起動時のパフォーマンス指標に関する情報が含まれます。
制限
これらのイベントは、Web ブラウザーで実行されている キャンバス アプリに対して正確です。 これらは Power Apps モバイルで実行されているアプリでは使用できず、カスタム ページでは値が常に使用可能または正確であるとは限りません。
セッション概要イベントと使用可能なすべてのフィールドにアクセスする方法を示すクエリの例を次に示します。
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
//
| extend cd = parse_json(customDimensions)
//
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend successfulAppLaunch = tobool(sessionSummary["successfulAppLaunch"])
| extend unsuccessfulReason = tostring(sessionSummary["unsuccessfulReason"])
| extend appLoadResult = tostring(sessionSummary["appLoadResult"])
| extend appLoadNonOptimalReason =
tostring(sessionSummary["appLoadNonOptimalReason"])
//
| extend timeToAppInteractive = todouble(sessionSummary["timeToAppInteractive"])
| extend timeToAppFullLoad = todouble(sessionSummary["timeToAppFullLoad"])
//
| project
timestamp,
session_Id,
successfulAppLaunch,
unsuccessfulReason,
appLoadResult,
appLoadNonOptimalReason,
timeToAppInteractive,
timeToAppFullLoad
| limit 5
次のフィールドは、アプリ起動の成功と、エンドユーザーエクスペリエンスに関連付けられたパフォーマンスマーカーの待機時間を測定するのに役立ちます。
Field | プロパティ |
---|---|
successfulAppLaunch | セッションがアプリを正常に起動したかどうかを示すブール値 |
unsuccessfulReason (失敗理由) | セッションがアプリの起動に失敗した場合、これは理由/エラーを示します。 セッションが成功した場合、このフィールドは空の文字列になります。 |
appLoadResult | セッションが最適だったかどうかを示します。 可能な値: optimal、other |
appLoadNonOptimalReason | セッションが最適でなかった場合は、これが理由を示します。 可能な値: interaction-required、throttled、screen-navigated-away、other |
timeToAppInteractive | アプリ セッションが対話状態になるまでの時間 (ミリ秒単位)。 この状態では、ユーザーは最初の画面の操作を開始できますが、データが完全に読み込まれていない可能性があります。 |
timeToAppFullLoad | アプリ セッションが完全に読み込まれた状態 (最初の画面に対するすべてのデータ要求の読み込みが完了した状態) に達するまでの時間 (ミリ秒単位)。 |
サンプル クエリ
アプリ起動の成功率
このクエリには、アプリを開く成功率が日別に表示されます。 これは、ユーザーが経験している可能性のある問題の急増や傾向を評価するために使用できます
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
| extend cd = parse_json(customDimensions)
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend successfulAppLaunch = tobool(sessionSummary["successfulAppLaunch"])
| summarize
sessions_total = dcount(session_Id),
sessions_success = dcountif(session_Id, successfulAppLaunch == true)
by bin(timestamp, 1d)
| extend successRate =
100.0 * (todouble(sessions_success) / todouble(sessions_total))
| project timestamp, successRate
| render timechart
失敗したセッションの数 (理由別)
このクエリは、失敗したセッションの数を理由/エラー別に表示します。 これは、アプリを開くエラーをデバッグしたり、ユーザーが経験している可能性のある問題の傾向を評価したりするために使用できます。
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
| extend cd = parse_json(customDimensions)
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend successfulAppLaunch = tobool(sessionSummary["successfulAppLaunch"])
| extend unsuccessfulReason = tostring(sessionSummary["unsuccessfulReason"])
| where successfulAppLaunch == false
| summarize
count()
by unsuccessfulReason, bin(timestamp, 1d)
| render timechart
アプリ起動のパフォーマンス
このクエリには、アプリ起動時のパフォーマンス指標が日別に表示されます。 これは、時間の経過に伴うパフォーマンスの傾向や変更後のパフォーマンスの傾向を評価するために使用できます。 次を推奨します:
- timeToAppInteractive フィールドと timeToAppFullLoad フィールドの 75 パーセンタイルを使用して、外れ値によるノイズを回避します。
- ユーザーインタラクションのあるセッション、アプリがバックグラウンド タブに読み込まれたセッションなど、予想されるケースによって引き起こされるデータのノイズを回避するために、最適なセッションのみにフィルター処理します。
customEvents
| where name == "PowerAppsClient.PublishedApp.SessionLoadSummary"
| extend cd = parse_json(customDimensions)
| extend sessionSummary = parse_json(tostring(cd["ms-sessionSummary"]))
| extend appLoadResult = tostring(sessionSummary["appLoadResult"])
| extend timeToAppInteractive = todouble(sessionSummary["timeToAppInteractive"])
| extend timeToAppFullLoad = todouble(sessionSummary["timeToAppFullLoad"])
| where appLoadResult == "optimal"
| summarize
percentile(timeToAppInteractive, 75),
percentile(timeToAppFullLoad, 75)
by bin(timestamp, 1d)
| render timechart
HTTP 呼び出しでのアプリの読み込み状態
HTTP 呼び出しがアプリの起動に寄与したかどうかを示す新しい要求ヘッダー x-ms-app-load-state があります。 具体的には、これを使用して、どの HTTP 呼び出しが上記の timeToAppFullLoad に影響を与えたかを判断できます。
ヘッダーは、2 つの値の内の 1 つになります:
価値 | プロパティ |
---|---|
TTFLの | 要求が timeToAppFullLoad に寄与したことを示します |
ポストTTFL | 要求が timeToAppFullLoad に寄与しなかったことを示します |
ヘッダー値にアクセスし、それを appLoadState 列に射影する方法を示すクエリの例を次に示します。
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| project timestamp, session_Id, appLoadState, name, duration
| limit 5
フル ロードに寄与している HTTP 呼び出しの数
このクエリには、フルロードに寄与している HTTP 呼び出しの平均数が日別に表示されます。 これを使用して、パフォーマンスの低下に寄与している可能性のある起動時にアプリが行っている呼び出しの数を評価できます。
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| where appLoadState == "TTFL"
| summarize httpCalls = count() by session_Id, bin(timestamp, 1d)
| summarize avg(httpCalls) by timestamp
| render timechart
フル ロードに寄与している HTTP 呼び出しの期間
このクエリには、timeToAppFullLoad に寄与している HTTP 呼び出しの合計期間が日別に表示されます。 これを使用して、HTTP 呼び出しがアプリ起動時のパフォーマンスに及ぼす全体的な影響を評価できます。
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| where appLoadState == "TTFL"
| summarize httpCallDuration = sum(duration) by session_Id, bin(timestamp, 1d)
| summarize percentile(httpCallDuration, 80) by timestamp
| render timechart
URL ごとの全ロードに寄与する HTTP 呼び出しの期間
上記のように、このクエリには、URL による timeToAppFullLoad に寄与している HTTP 呼び出しの数と期間が表示されます。 これは、アプリの起動時のパフォーマンスに影響を与えている特定の低速 HTTP 呼び出しを特定するために使用できます。
dependencies
| extend cd = parse_json(customDimensions)
| extend requestHeaders = parse_json(tostring(cd["requestHeaders"]))
| extend appLoadState = tostring(requestHeaders["x-ms-app-load-state"])
| where appLoadState == "TTFL"
| summarize
count(), percentile(duration, 80) by name
未処理のエラーを監視する (実験段階)
[このセクションにはリリース前の ドキュメントが含まれているため、変更される場合があります。]
重要
- これは試験段階の機能です。
- 試験段階の機能は運用環境での使用を想定しておらず、機能が制限されている場合があります。 これらの機能を公式リリースの前に使用できるようにすることで、顧客が事前にアクセスし、そこからフィードバックを得ることができます。
アプリの実行中に発生する可能性のあるすべてのエラーを常に予測または計画できるわけではありません。 未処理の Power Fx 式エラーは、バナー メッセージとしてユーザーに報告されます。 また、アプリのユーザーに問題の報告を依頼することなく、頻度と重大度を示すために Application Insights に報告することもできます。 ランタイム エラーが発生したときに リアルタイム アラートを設定 して、より積極的なアプローチをとることもできます。
Application Insights にエラーを受け渡しできるようにする
Power Apps が、未処理のランタイム エラーを Azure Application Insights に渡せるようにする設定を有効にします。
警告
エラーを Azure Application Insights に渡す設定を有効にした場合、Application Insights ログを保存すると追加コストが発生する場合があります。
- キャンバス アプリを開いて編集します。
- 設定>更新>実験的を選択し、エラーを Azure Application Insights に渡すをオンにします。
- 保存してアプリを公開します。
Application Insights でのエラー イベント
アプリの実行時にユーザーが遭遇する未処理の Power Fx エラーは、トレース テーブルに報告されます。 未処理のエラーは、「未処理エラー」というイベント メッセージによって識別され、他のエラーイベントと区別することができます。これらのイベントの「severityLevel」分析コードは3 (TraceSeverity.Error) です。
詳細なエラー メッセージは、customDimension プロパティの "errors" ディメンションにあります。 同じ操作中に複数のエラーが発生した場合、エラーは 1 つのトレース イベントの "errors" ディメンションに統合されます。 エラー メッセージは、ライブ デバッグ セッション中に 監視 で報告されたものと一致します。
このクエリ例では、未処理のエラーを識別し、トレース イベント内のすべてのエラー メッセージを展開します。
traces
| where message == "Unhandled error"
| extend customdims = parse_json(customDimensions)
| extend errors = parse_json(tostring(customdims.['errors']))
| mv-expand errors
| project timestamp
, itemId //unique identifier for the trace event
, AppName = customdims.['ms-appName']
, AppId = customdims.['ms-appId']
, errors = errors.['Message']
| order by timestamp desc
相関トレース (実験段階)
[このセクションにはリリース前の ドキュメントが含まれているため、変更される場合があります。]
重要
- これは試験段階の機能です。
- 試験段階の機能は運用環境での使用を想定しておらず、機能が制限されている場合があります。 これらの機能を公式リリースの前に使用できるようにすることで、顧客が事前にアクセスし、そこからフィードバックを得ることができます。
外部のデータやサービスへの接続は、ほとんどのアプリにとって不可欠です。 関連付けトレースは、コンテキスト情報を生成して伝播し、特定の制限に従って、キャンバス アプリとその接続を介してシステム生成ログをリンクします。 たとえば、アプリでカスタム コネクタを呼び出し、そのカスタム コネクタが Azure 関数または別の REST API を呼び出す場合があります。 関連付けトレースを使用すると、アプリ内で実行されたアクションと層全体の基礎となる API 呼び出しを関連付けることができます。 これはトラブルシューティングに便利です。
キャンバス アプリの関連付けトレースは、コンテキスト トレースを実装し、W3C 仕様に従います。
関連付けトレースの有効化
警告
この設定を有効にすると、Application Insights ログの保存に関連する追加コストが発生する場合があります。
- 関連付けトレースを有効にするには、キャンバス アプリを開いて編集します。
- 設定>更新>実験的> を選択し、Azure Application Insights の関連付けトレースを有効にするをオンにします。
- アプリを保存し、公開します。
制限事項
- 相関トレースは、カスタム コネクタでのみ機能します。 他のタイプのコネクタはサポートされていません。
- HTTP リクエストは、接続されたサービスが Application Insights にも接続されている場合にのみ、Application Insights でキャプチャされます。
相関トレースの使用
相関トレースを有効にすると、キャンバス アプリの Application Insights インスタンスの 依存関係 テーブルに新しいシステム生成ログ イベントが追加されます。 このイベントは、ネットワーク呼び出しからの応答を受信したときに記録されます。 依存関係イベントは、要求ヘッダーと応答ヘッダー、応答ステータス コード、呼び出しの継続時間など、ネットワーク呼び出しの詳細をキャプチャします。
接続済みサービスが Application Insights にも接続されている場合、要求をキャプチャする追加のシステム生成ログ イベントがサービスの Application Insights インスタンスの要求テーブルで生成されます。 Azure Functions などの一部の Azure サービスは、コーディングなしで Azure portal から接続できます。 キャンバス アプリまたは複数のアプリと接続されたサービスの両方を同じ Application Insights インスタンスに接続できます。
サポートされているコネクタのネットワーク呼び出しを、"operation_Id" ディメンションで他のシステム生成ログと結合します。 次のクエリは、アプリ セッション中に出力されるトレース イベントと共にネットワーク呼び出しを示しています。
traces | union dependencies | union requests | union pageViews | union customEvents
| project timestamp
, itemType
, name
, operation_Name
, message
, severityLevel
, customDimensions
, operation_Id
, operation_ParentId
| where operation_Id == "0a7729e3e83c4e4d93cb4f51149f73b9" //placeholder operation_Id, replace
| order by timestamp asc
Power BI へのデータのエクスポート
Application Insights データおよびクエリ結果を Power BI にエクスポートして、分析およびデータ プレゼンテーションをすることができます。
Azure ポータル にサインインし、先ほど設定した Application Insights リソースを開きます。
左側のナビゲーション ウィンドウで、監査の下のログを選択します。
ログ分析クエリ ウィンドウで、エクスポート メニューを選択します。
Power BI (M クエリ) をエクスポートを選択して、Power BI クエリ ファイルをダウンロードします。
ダウンロードしたファイルをテキスト エディターで開き、クエリをクリップボードにコピーします。
Power BI を開きます。
ホームリボンのデータ取得を選択し、次に空のクエリを選択します。
クエリ ウィンドウで 詳細エディターを選択し、クエリをウィンドウに貼り付けて 完了 を選択し、閉じて適用 を選択します。
Power BI でグラフおよびビジュアル化を作成して、アプリで受け取ったフィードバックを表示し、データに基づいた決定を行います。
既定のトレース イベント コンテキストおよびディメンション
既定のディメンションは、各トレース イベントの customDimensions プロパティにも追加されます。 これらのディメンションは、イベントが発生したアプリケーションとアプリケーションのセッションを識別します。 トレース機能を使用して追加のカスタム データを記録する場合、カスタム ディメンションに表示されます。
ディメンション名 | 説明 |
---|---|
ms-appId | イベントを送信したアプリのアプリケーション ID。 |
ms-appname | イベントを送信したアプリのアプリケーションの名前。 |
ms-appSessionId | アプリケーション セッション ID。 一部のシナリオでは、この値が入力されない場合があります。 使用可能な場合、この値は標準の Application Insights sessionID ディメンションを上書きします。 |
ms-tenantID | アプリケーションが公開されるテナントの一意識別子。 |
ms-environmentId | アプリケーションが公開される環境の名前。 |
userId | セッションに関連付けられたユーザーの一意識別子。 |
ms-duration | ユーザーがある画面から別の画面に移動するのにかかる時間を測定する帰属値。 この値は標準の Application Insights PageView 期間ディメンションを上書きします。 |
sessionId | 1 つのアプリケーション セッションに関連付けられたすべてのイベントを関連付けるために使用できるセッション ID。 この値は常に存在し、一意のセッション数を理解するために推奨されます。 この値は、プレーヤーのセッション ID から取得され、アプリの再生中にセッションの詳細を表示するときに表示されます。 セッション ID は、既定、ランダム、および一意の Application Insights 生成値を取得することがあります。 この既定値は信頼性が低く、アプリ固有のパラメーターとは関連付けられていません。 |
期間 | ユーザーがある画面から別の画面に移動するのにかかる時間を測定する帰属値。 この値は、ms-duration ディメンションによって報告される期間と一致します。 |
ms-isTest | セッションが Test Studio テスト ランナーに関連付けられているかどうかを示します。 |
ms-currentScreenName | ユーザーの移動元のページの名前 (ページ ナビゲーション イベントで利用可)。 |
ms-targetScreenName | ユーザーの移動先のページの名前 (ページ ナビゲーション イベントの場合に表示されます)。 |
サポートされていないシナリオ
Application Insights では、これらのシナリオはサポートされていません。
- オフライン プレイヤー イベントは記録されません。
- モバイル アプリからのイベント (iOS および Android) は、アプリが中断されると記録されません。