> For the complete documentation index, see [llms.txt](https://app.developers.karte.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://app.developers.karte.io/karte-for-app-best-practices/sdk-implementation-checklist.md).

# KARTE for AppのSDKインストール時に確認すべき内容

以下はKARTE for App導入時に、SDKのインストールやイベント送信が正しく実装ができているかについて確認すべき項目です。

適宜、導入時のテスト等でご活用ください。

※記載の内容については標準的に利用されることの多い機能を中心としているため、全機能を網羅した内容ではないことに留意してください

## SDKのインストール

### OS毎のmodule

* 両OSの任意イベントのapp\_infoから以下のmoduleを確認し、モジュール毎にインストール状況に差分がないかを確認してください

  | モジュール        | iOSでの名称              | Androidでの名称                           |
  | ------------ | -------------------- | ------------------------------------- |
  | core         | core                 | core                                  |
  | アプリ内メッセージ    | in\_app\_messaging   | inappmessaging                        |
  | プッシュ通知       | remote\_notification | notifications                         |
  | 設定値配信        | variables            | variables                             |
  | ビジュアルトラッキング  | visual\_tracking     | visualtracking                        |
  | クラッシュレポーティング | crash\_reporting     | （Androidではcoreが自動計測するためmoduleは存在しません） |
  | SDKイベントデバッガー | karte\_debugger      | debugger                              |

### KARTE独自のカスタムURLスキームの設定

* 簡易的に確認する場合は、[自分を探す](https://support.karte.io/post/5IJjR3XbaIA4yVK1drqoRB#2-1)機能が各OSで動作するかを確認することで、正常性を判断できます
  * [iOS](/ios-sdk-appendix/concepts-custom-url-scheme-ios-sdk.md)
  * [Android](/android-sdk-appendix/concepts-custom-url-scheme-android-sdk.md)
* ※KARTEで配信されたコンテンツからアプリ内で任意の画面に遷移できるかについては、別途アプリ内メッセージとプッシュ通知で確認を行ってください

### ログアウト時のvisitor\_idリセット

* ログアウト時にvisitor\_idをリセットする実装をしている場合は、ログアウト時に`native_app_renew_visitor_id`イベントが送信され、visitor\_idがリセットされていることを確認してください
  * [iOS](/ios-sdk-appendix/appendix-logout-ios-sdk.md)
  * [Android](/android-sdk-appendix/appendix-logout-android-sdk.md)

### WebView連携

* webview閲覧時にsourceが`native_app_webview`のviewイベントが発生するかを確認してください
  * [iOS](/ios-sdk/webview-ios-sdk.md)
  * [Android](/android-sdk/webview-android-sdk.md)
* WebViewで表示されるページに対して、マルチドメインモードの計測タグが出力されている場合には、\*.karte.io及びktid.karte-edge.ioのドメインをアプリ側のホワイトリストとして登録する必要があります
  * 参考:[マルチドメインモードの計測タグを利用しているページを閲覧するために必要な主なドメイン](https://support.karte.io/post/6mYPLBvWgVSOaTzd9x8cTj#2-1)
  * ※ホワイトリストとして登録されていない場合には、WebView表示時にブランクページが表示される等の挙動が発生します。
* 必要に応じてdismiss()が実装されているかを確認してください
  * 画面遷移時にdismiss （[iOS](/ios-sdk-appendix/appendix-iam-control-ios-sdk.md), [Android](/android-sdk-appendix/appendix-iam-control-android-sdk.md)）の実行が望ましい場合もあるため、必要に応じて実装してください。
  * 実装されていない場合には、Native画面からWebView画面への遷移時に、意図せずIAM（=popup）が残存してしまう（非表示化されない）場合があります
  * 詳細は[WebViewに遷移した際の画面境界の認識と、考慮すべき事項について](/app-faq/boundary-behavior-in-webview.md)をご確認ください

### 主要なイベントの発生状況

* `native_app_open`等の[SDKが標準で自動送信するイベント](https://support.karte.io/post/11d8yPBBnKF5XRsvUpAPtk)が正常に発生しているか？
* deeplink経由でアプリを起動した際に`deep_link_app_open`が発生しているか？
  * 発生しない場合は、OS毎に以下の対応に不備がある可能性があります
  * iOS
    * [Universal Links に対応する](https://app.developers.karte.io/karte-for-app-best-practices/pages/zbTfzKx8uikbrgVDmPOE#ディープリンクを利用したkarte-sdk機能)
    * [SwiftUI向けの対応: ディープリンクによってアプリが起動した際にdeep\_link\_app\_openイベントを発生させる](https://app.developers.karte.io/karte-for-app-best-practices/pages/Sd9mz0vjbFnAcPiyBSVH#ディープリンクによってアプリが起動した際にdeep_link_app_openイベントを発生させる)
  * Android
    * [再開されるActivityに対応する](/android-sdk-appendix/appendix-relaunch-activity-android-sdk.md)
* `plugin_native_app_identify`が適切なタイミングで発生してるか？
  * 適切にFCMトークンを送信する実装([iOS](/ios-sdk/notification-ios-sdk.md)/[Android](/android-sdk/notification-android-sdk.md))がされている場合は、以下に記載のタイミングでplugin\_native\_app\_identifyが発生します
  * [FCM登録トークンや、アプリPUSH通知許可設定がKARTEに送信されるタイミング](https://support.karte.io/post/38slBGumICBZdaURAESXvU)

### その他

* オプトアウト/オプトインが実装されている場合は、適切に動作するかの確認
  * [iOS](https://app.developers.karte.io/karte-for-app-best-practices/pages/mspG7qag1EB5hjTI5fjR#オプトインする)
  * [Android](https://app.developers.karte.io/karte-for-app-best-practices/pages/Dm7Fyg5Moi9DrOruJVWx#オプトインする)
* dismiss/suppress/unsuppressが実装されている場合は、適切に動作するかの確認
  * [iOS](/ios-sdk-appendix/appendix-iam-control-ios-sdk.md)
  * [Android](/ios-sdk-appendix/appendix-iam-control-ios-sdk.md)

## イベント送信

### イベント送信全般

* イベントの発生回数や送信タイミングに過不足が無いかを確認してください
  * 修正すべき例
    * 特定のイベントが過剰に送信されている
    * 発生するはずのイベントが一切発生しない、もしくは欠落することがある
    * イベントが発生するはずのタイミングと異なったタイミングで送信されている
* field名や、fieldの値の型やフォーマットが設計通りに実装されているかを確認してください
* OS間の差分
  * OS間でイベントの送信タイミング、送信される順番に差分がないかを確認してください
    * 修正すべき例
      * iOSではイベントA->イベントBという順番だが、AndroidではイベントB->イベントAという順番で送信されている
  * OS間でイベント名、field名、fieldの値の型やフォーマットに差分がないかを確認してください

### viewイベント

* 1画面を閲覧した際には、その画面のview\_name, titleで1回だけviewイベントが送信されことを確認してください
* 修正すべき例
  * 画面描画のタイミングと著しくずれたタイミングでviewイベントが送信される
  * 他のview\_name, titleと重複している
  * 意図したview\_name, titleの値が送信されていない
  * OS間で送信内容に差分がある
  * 過剰に発生する、もしくは発生しない
* 参考:[ viewイベント送信のベストプラクティス](/karte-for-app-best-practices/best-practices-for-sending-view-events.md)

### identify/attribute/カスタムイベント

* 意図した送信タイミングで、OS間で差分なく、抜け漏れなく送信されることを確認してください
* 個人情報や、削除が必要な情報はidentifyイベント以外で送られていないか確認してください
* user\_idが無い状態でidentifyイベントが送信されていないか確認してください

## アプリ内メッセージ(IAM)

* 以下の設定で、popupの接客サービスがテストユーザーに配信されるように設定してください
  * アクション : 任意のリンク遷移が可能なpopupで、アプリ内で遷移可能なdeeplinkを設定
  * 対象ユーザー : 任意のテストユーザーを指定
  * 対象イベント : 施策実施対象になる画面のviewイベント指定
  * ネイティブアプリにおける接客表示制御 : 表示制御をしない
  * 配信頻度 : アクセス毎
  * 同時配信 : OK
  * その他の項目 : 指定なし
* 前述のpopupを各OSでテストユーザーに配信し、以下を確認してください
  * 当該画面に遷移した場合に適切なタイミングでpopupが表示され、意図しないタイミングで消えない
  * アプリ側の要素によって、popupの表示が阻害されない（=popupの手前側にアプリ側の要素が表示され、表示が阻害されることがない）
  * popup上に指定したリンク押下時に適切に遷移できる
    * アプリ内の任意画面へ遷移するdeeplink
    * https始まりでブラウザを起動、もしくはアプリ内webviewを開くリンク
  * deeplink遷移時に[deep\_link\_app\_open](#主要なイベントの発生状況)イベントが送信される
  * 非モーダルタイプのpopupで、当該画面のアプリ側の要素を押下できる
  * (※[表示制御オプション](https://support.karte.io/post/3JaA3BlXQea59AaPGxD3bb)を特に指定しない場合に)当該画面から別の画面に遷移した場合に、popupが非表示化される\
    ※テストの網羅性を高めたい場合は、対象イベントを任意で追加してください

## プッシュ通知

* push送信が許可されているユーザーに対して任意の方法でpushを配信し、以下を確認してください
  * 各OSで、アプリがタスクキル/フォアグラウンド/バックグラウウンドの状態で、pushをタップした際に適切にアプリ起動とリンク遷移ができる
  * pushタップ時のdeeplink遷移時に[deep\_link\_app\_open](#主要なイベントの発生状況)イベントが送信される
* pushに指定したリンクに適切に遷移できる
  * アプリ内の任意画面へ遷移するdeeplink
  * https始まりでブラウザを起動、もしくはアプリ内webviewを開くリンク
* その他、以下の対応をしている場合は合わせて適切な挙動をするかご確認ください
  * [カスタムペイロード](/app-send-notification/app-customize-notification-payload.md)への対応
  * iOSの[リッチプッシュ](/ios-sdk-appendix/appendix-rich-notification-ios-sdk.md) や[サイレント通知](/app-send-notification/ios-silent-push.md)
  * Androidの[通知チャネルやヘッドアップ通知](/app-send-notification/android-heads-up-notification.md)

## 設定値配信

[設定値配信のテスト](https://app.developers.karte.io/karte-for-app-best-practices/pages/MlarqMaPNfUnuLaXsHNT#設定値配信のテスト) をご確認ください。

## その他

### アクセシビリティ関連

* KARTEで配信されるコンテンツの設定次第では、アクセシビリティ関連の対応要件を満たさない状態で配信される可能性があります。以下のドキュメントに応じて、適宜設定確認、動作確認をしてください
  * [アクションのアクセシビリティ対応](https://support.karte.io/post/4j9g0Ml00NeOdpr0NecQKI)
  * [スクリーンリーダー対応](/app-faq/supporting-screen-readers.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://app.developers.karte.io/karte-for-app-best-practices/sdk-implementation-checklist.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
