> 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/flutter-sdk/setup-flutter-sdk.md).

# \[Flutter]SDKを導入する

{% hint style="warning" %}
**導入時の注意事項**

新規でのFlutter環境への導入、もしくは既存環境をFlutter環境に移行する場合、担当から詳細をご案内しております。\
適宜担当までご連絡をお願い致します。
{% endhint %}

## 前提条件

KARTE Flutter SDKを導入するための前提条件に関しては、[公開リポジトリのREADME](https://github.com/plaidev/karte-flutter?tab=readme-ov-file#requirements)をご参照ください。

※ Flutter on the Web, Flutter on Desktop には対応していません。

## 導入手順（共通）

### パッケージをインストールする

アプリケーションの pubspec.yaml の dependencies にパッケージを記入し、 `pub get` コマンドでインストールしてください。

{% code title="pubspec.yaml" overflow="wrap" %}

```yaml
dependencies:
  karte_core: any
```

{% endcode %}

{% code overflow="wrap" %}

```shell
flutter pub get
```

{% endcode %}

パッケージのインストールが完了したら、対応するプラットフォーム毎の導入手順に従い設定を進めてください。

{% hint style="warning" %}
**利用可能なパッケージについて**

karte\_core パッケージはイベントトラッキング機能のみを提供します。\
アプリ内メッセージ・プッシュ通知受信などのその他機能については、別途パッケージを導入する必要があります。\
利用可能なパッケージについては、[利用可能なパッケージ一覧](#利用可能なパッケージ一覧) をご覧ください。
{% endhint %}

## 導入手順（iOS）

### STEP1: SDKの初期化コードを追加する

アプリケーションにSDKの初期化コードを追加します。

1. SDKの初期化に必要な値（アプリケーションキーなど）が定義された設定ファイルをプロジェクトに追加します。
   1. 管理画面から設定ファイルをダウンロードする\
      設定ファイルのダウンロード方法については[サポートサイト](https://support.karte.io/post/SRlsXvrikIKjpZcfahGdc)をご覧ください。
   2. 設定ファイルをプロジェクトに配置する

      設定ファイルを Xcodeプロジェクトのルートに追加して必要なターゲット全てに含まれるようにチェックを行います。

      ![](https://2393392196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH4XuUv5EgXiqltJXSiRd%2Fuploads%2Fgit-blob-15cc4f19d9e1e4e8b7df0e5578a55606e22a0946%2F1c693fc-add-config-to-project.png?alt=media)

      ![](https://2393392196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH4XuUv5EgXiqltJXSiRd%2Fuploads%2Fgit-blob-33cb28bb9c9e8e40f2e0096afe141bc56a2f6e25%2Fdc513d9-add-config-to-target.png?alt=media)
2. SDKのインポート宣言を追加 `UIApplicationDelegate` を実装したクラスがあるファイルの先頭にインポート宣言を追加します。

{% tabs %}
{% tab title="Objective-C" %}
{% code title="AppDelegate.m" overflow="wrap" %}

```objc
@import KarteCore;
```

{% endcode %}
{% endtab %}

{% tab title="Swift" %}
{% code title="AppDelegate.swift" overflow="wrap" %}

```swift
import KarteCore
```

{% endcode %}
{% endtab %}
{% endtabs %}

2. SDKの初期化コードを追加 `application(_:didFinishLaunchingWithOptions:)` メソッド内に初期化コードを追加します。

{% tabs %}
{% tab title="Objective-C" %}
{% code title="AppDelegate.m" overflow="wrap" %}

```objc
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [KRTApp setupWithConfiguration:KRTConfiguration.default_];
  ...
}
```

{% endcode %}
{% endtab %}

{% tab title="Swift" %}
{% code title="AppDelegate.swift" overflow="wrap" %}

```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  KarteApp.setup()
  ...
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**設定ファイルによるSDKの初期化について**

※設定ファイルによるSDK初期化は iOS SDK v2.12.0 以上から利用できます。
{% endhint %}

{% hint style="warning" %}
**アプリケーションキーについて**

初期化時に指定するアプリケーションキー（Application Key）は、KARTE管理画面に記載されているAPIキーとは異なります。取得方法は[アプリケーションキーの確認方法](https://support.karte.io/post/1PbomDUORPoCrcvos2rq3T#1-0)をご確認ください。
{% endhint %}

### STEP2: URLスキームハンドラを追加する

KARTEで独自に定義したURLスキームを処理するために、Scene-based lifecycleに対応しているアプリでは、`scene(_:willConnectTo:options:)` および `scene(_:openURLContexts:)` メソッド内にハンドラを追加します。

{% tabs %}
{% tab title="Objective-C" %}
{% code title="SceneDelegate.m" overflow="wrap" %}

```objc
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
  UIOpenURLContext *URLContext = connectionOptions.URLContexts.anyObject;
  if (URLContext) {
    [KRTApp application:[UIApplication sharedApplication] openURL:URLContext.URL];
  }
}

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
  UIOpenURLContext *URLContext = URLContexts.anyObject;
  if (URLContext) {
    [KRTApp application:[UIApplication sharedApplication] openURL:URLContext.URL];
  }
}
```

{% endcode %}
{% endtab %}

{% tab title="Swift" %}
{% code title="SceneDelegate.swift" overflow="wrap" %}

```swift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
  if let context = connectionOptions.urlContexts.first {
    KarteApp.application(UIApplication.shared, open: context.url)
  }
}

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  if let context = URLContexts.first {
    KarteApp.application(UIApplication.shared, open: context.url)
  }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

Scene-based lifecycleを使用していないアプリでは、`application(_:open:options:)` メソッド内にハンドラを追加します。

{% tabs %}
{% tab title="Objective-C" %}
{% code title="AppDelegate.m" overflow="wrap" %}

```objc
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
  return [KRTApp application:app openURL:url];
}
```

{% endcode %}
{% endtab %}

{% tab title="Swift" %}
{% code title="AppDelegate.swift" overflow="wrap" %}

```swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
  return KarteApp.application(app, open: url)
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**Objective-C から SDK を利用する**

Objective-C から SDK を利用した場合、ビルド時にエラーが発生する場合があります。\
エラーが発生した場合は、[こちら](/ios-sdk-appendix/appendix-using-objective-c-ios-sdk.md) の記事を参考にしてください。
{% endhint %}

## 導入手順（Android）

### STEP1: Applicationを継承したクラスを作成する

1. android.app.Applicationを継承したクラスを作成しファイルを追加 package以下の任意の場所に`Application`を継承したクラスを作成し任意のファイル名で追加します（ここでは`YourApplication.kt`）

{% tabs %}
{% tab title="Java" %}
{% code title="YourApplication.java" overflow="wrap" %}

```java
package com.example.flutter_sample;

import android.app.Application;

public class YourApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="Kotlin" %}
{% code title="YourApplication.kt" overflow="wrap" %}

```kotlin
package com.example.flutter_sample

import android.app.Application

class YourApplication: Application() {
    override fun onCreate() {
        super.onCreate()
    }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="info" %}
**ファイルの追加場所**

ファイルはAndroidのpackage配下（ここでは`com.example.flutter_sample`）の任意の場所に追加できますが、Flutterプロジェクト作成時に自動で作成される`MainActivity.kt`が存在するディレクトリ直下に追加する場合が多いです。またすでにandroid.app.Applicationを継承したクラスが存在する場合はこのSTEPは不要です。
{% endhint %}

2. AndroidManifest.xmlに追加したクラスを登録 AndroidManifest.xmlを開き`application`の`name`属性を以下のように変更します。この変更によりアプリ起動時に`YourApplication.onCreate()`内の処理が実行されるようになります。

{% code title="AndroidManifest.xml" overflow="wrap" %}

```diff
    <application
-         android:name="${applicationName}"
+         android:name="com.example.flutter_sample.YourApplication" # 追加したファイルへのパス
          android:label="flutter_sample"
          android:icon="@mipmap/ic_launcher">
```

{% endcode %}

### STEP2: SDKの初期化コードを追加する

1. SDKの初期化に必要な値（アプリケーションキーなど）が定義された設定ファイルをプロジェクトに追加します。
   1. 管理画面から設定ファイルをダウンロードする\
      設定ファイルのダウンロード方法については[サポートサイト](https://support.karte.io/post/SRlsXvrikIKjpZcfahGdc)をご覧ください。
   2. 設定ファイルをプロジェクトに配置する\
      設定ファイルをプロジェクトのリソースに追加します。該当するビルドバリアントの res/values ディレクトリに配置してください。
2. SDKのインポート宣言を追加 `android.app.Application` クラスを継承したクラスがあるファイルの先頭にインポート宣言を追加します。

{% tabs %}
{% tab title="Java" %}
{% code title="YourApplication.java" overflow="wrap" %}

```java
import io.karte.android.KarteApp;
```

{% endcode %}
{% endtab %}

{% tab title="Kotlin" %}
{% code title="YourApplication.kt" overflow="wrap" %}

```kotlin
import io.karte.android.KarteApp
```

{% endcode %}
{% endtab %}
{% endtabs %}

2. SDKの初期化コードを追加 `onCreate` メソッド内に初期化コードを追加します。

{% tabs %}
{% tab title="Java" %}
{% code title="YourApplication.java" overflow="wrap" %}

```java
public class YourApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    KarteApp.setup(this);
  }
}
```

{% endcode %}
{% endtab %}

{% tab title="Kotlin" %}
{% code title="YourApplication.kt" overflow="wrap" %}

```kotlin
class YourApplication : Application() {
  override fun onCreate() {
    super.onCreate()
    KarteApp.setup(this)
  }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

### STEP3: 暗黙的インテントを解決するための設定を追加する（オプション）

一部の機能 \*1 を利用するためには、暗黙的インテントを解決するための設定を AndroidManifest.xml に追加する必要があります。

\*1. 管理画面に表示したQRコードを読み込みによるSDK機能の呼び出し

{% code title="AndroidManifest.xml" overflow="wrap" %}

```xml
<activity android:name=".XxxActivity">

  <!-- 任意のActivityに対して、以下の指定を行なってください -->
  <intent-filter >
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="<アプリ毎に定義したスキーム名を指定>" android:host="karte.io" />
  </intent-filter>
</activity>

```

{% endcode %}

## 利用可能なパッケージ一覧

KARTE Flutter SDKでは機能毎にパッケージを提供しております。\
利用する機能に応じて、部分的にパッケージを導入することが可能です。

なお `karte_core` パッケージの導入は必須です。

| Package name              | Latest version                                           | Description                                                                 |
| ------------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
| karte\_core               | ![](https://img.shields.io/pub/v/karte_core)             | イベントトラッキング機能を提供します。                                                         |
| karte\_in\_app\_messaging | ![](https://img.shields.io/pub/v/karte_in_app_messaging) | アプリ内メッセージ機能を提供します。[（導入手順）](/flutter-sdk/iam-flutter-sdk.md)                 |
| karte\_notification       | ![](https://img.shields.io/pub/v/karte_notification)     | プッシュ通知の受信および効果測定機能を提供します。[（導入手順）](/flutter-sdk/notification-flutter-sdk.md) |
| karte\_variables          | ![](https://img.shields.io/pub/v/karte_variables)        | 設定値配信機能を提供します。[（導入手順）](/flutter-sdk/variables-flutter-sdk.md)               |
| karte\_visual\_tracking   | ![](https://img.shields.io/pub/v/karte_visual_tracking)  | ビジュアルトラッキング機能を提供します。[（導入手順）](/flutter-sdk/visual-tracking-flutter-sdk.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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://app.developers.karte.io/flutter-sdk/setup-flutter-sdk.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
