Flutter SDK - 基本的な統合

ドキュメント
新着:動画ガイド

統合プロセスの詳細については、こちらの動画をご覧ください。 動画と以下の文書によるガイドを 併せてご利用いただくことをお勧めします。

前提条件

Singular Flutter SDK をインストールする前に、以下の前提条件をすべて満たし、スムーズな統合プロセスを確保してください。

必須の前提条件:

  • 計画手順の完了:Singular SDKの統合:計画と前提条件」のガイドに従ってください。これらの手順は、Singular SDKを統合する際に必須です。
  • Flutterのバージョン:Flutter SDKがインストールされた、正常に動作するFlutterアプリケーションがあることを確認してください。
  • SDK 認証情報:Singular プラットフォームの [Developer Tools] > [SDK Integration] > [SDK Keys] から SDK キーとシークレットを取得してください。

インストール

SDKパッケージのインストール

pubspec.yamlの依存関係マネージャーを使用して、Singular Flutter SDKをプロジェクトに追加します。 このSDKは、iOSおよびAndroid向けのネイティブSingular SDKへのDartバインディングを提供します。 iOSおよびAndroid向けのネイティブSingular SDKへのDartバインディングを提供します。

SDK 依存関係の追加

  1. pubspec.yamlの更新:Singular Flutter SDKの 依存関係をプロジェクトのpubspec.yaml ファイルに追加します:
    pubspec.yaml
    dependencies:
      flutter:
        sdk: flutter
      singular_flutter_sdk: ^1.8.0
  2. 依存関係をインストールする:ターミナルでプロジェクトディレクトリに移動し、 以下を実行します:
    bash
    flutter packages get

プラットフォーム設定

iOSの設定

iOSアトリビューション追跡のためのAdServicesフレームワークのサポートを有効にするため、 iOS固有の設定を完了してください。

AdServicesフレームワークの追加

Apple Search AdsのアトリビューションおよびiOS 14.3以降のSKAdNetwork統合には、 AdServicesフレームワークが必要です。

  1. iOSプロジェクトに移動する:Flutterプロジェクトの iOSディレクトリを開き、Xcodeワークスペースを探します。
    • Flutterプロジェクトのios フォルダに移動します。
    • XcodeでRunner.xcworkspace を開きます(CocoaPodsを使用している場合は .xcworkspace を、そうでない場合は .xcodeproj を使用してください)。
  2. AdServicesフレームワークを追加します:Xcodeプロジェクトの設定で フレームワークを設定します。
    • Xcodeで、プロジェクトのターゲット(例:「Runner」)を選択します。
    • General」タブに移動します。
    • フレームワーク、ライブラリ、および埋め込みコンテンツ」 セクションまでスクロールします。
    • 「+」ボタンをクリックします。
    • AdServices.framework 」を検索して追加します。
    • フレームワークのステータスを「オプション」に設定します(これにより、 古い iOS バージョンとの互換性が確保されます)。

なぜ「オプション」なのか?AdServicesをオプションに設定することで、 このフレームワークが含まれていないiOSバージョン(iOS 14.2以前)との 互換性を維持できます。

Androidの設定

SDK が正常に機能するように、必要な権限と依存関係を追加するよう Android ビルドファイルを設定してください。

必要な権限の追加

AndroidManifest.xml ファイルの <manifest> タグの下にこれらの権限を追加し、 SDKのコア機能を有効にしてください。

AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="BIND_GET_INSTALL_REFERRER_SERVICE" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />

重要: Kids SDKを統合する場合は、 com.google.android.gms.permission.AD_ID 権限を除外してください。 この権限は、標準アプリでのGAID収集には必要ですが、 13歳未満の子供を対象とするアプリでは省略する必要があります。

Samsung Galaxy Storeのサポート

Samsung Galaxy Storeからのインストール参照元追跡を有効にするには、 AndroidManifest.xml に以下を追加してください:

AndroidManifest.xml
<queries>
   <package android:name="com.sec.android.app.samsungapps" />
</queries>

推移的依存関係

Gradle設定でSingular SDKの推移的依存関係を無効にしている場合は、 以下の必須依存関係を手動で追加してください:

android/app/build.gradle
dependencies {
    // Required for install referrer tracking
    implementation 'com.android.installreferrer:installreferrer:2.2'

    // Required for App Set ID
    implementation 'com.google.android.gms:play-services-appset:16.0.0'
}

ProGuardの設定

リリース用APKをビルドする際、ProGuard(またはR8)によってSDKの クラスが削除または難読化される可能性があります。Singularの機能を維持するために、以下のkeepルールを追加してください。

重要:Flutter Androidのリリースビルドでは、ProGuardはデフォルトで有効になっています。 適切なkeepルールを設定しないと、本番環境でSDKが正常に動作しない可能性があります。

  1. ProGuard ファイルの場所:Flutter プロジェクト内の android/app/proguard-rules.pro に移動します。
  2. keepルールの追加:SDKクラスを保持するために、 以下のルールを末尾に追加してください:
    android/app/proguard-rules.pro
    # Preserve Singular SDK classes
    -keep class com.singular.sdk.** { *; }
    
    # Preserve Android Install Referrer library
    -keep public class com.android.installreferrer.** { *; }
    
    # Uncomment if using Singular revenue tracking with Google Play Billing Library
    #-keep public class com.android.billingclient.** { *; }

SDKの統合

プライバシーコンプライアンス:Singular SDKを実装する際は、 GDPR、CCPA、COPPAなど、事業展開地域のプライバシー関連法規を遵守してください。 詳細については、「SDKのオプトインおよびオプトアウトの実践」を参照してください。

アプリが起動するたびに Singular SDK を初期化してください。SDK の初期化は Singular のすべてのアトリビューション機能に不可欠であり、ユーザーリテンション指標を 算出するための新しいセッションを作成します。

SDKクラスのインポート

メインのアプリケーションファイル(通常は `main.dart`)の先頭に、Singular SDKのクラスをインポートしてください。

Dart
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';

SDKの初期化

SDKの認証情報を使用してSingularConfig オブジェクトを作成し、 オプション機能を設定した後、 start() メソッドを使用してSDKを初期化します。

基本的な初期化

  1. 認証情報の取得:Singularアカウントにログインし、 「Developer Tools」>「SDK Integration」>「SDK Keys」 に移動して、SDKキーとシークレットを確認します。
  2. 設定の作成:認証情報を使用して SingularConfig オブジェクトをインスタンス化します。
  3. 設定の追加:必要に応じて、プロパティセッターを使用して SDKの動作を設定します( 「設定リファレンス」を参照)。
  4. SDKの初期化: Singular.start()を呼び出し、 SDKを起動します。

初期化の例

アプリのエントリポイント(通常はメインの StatefulWidget 内の initState() メソッド内)で SDK を初期化します。

Dart
import 'package:flutter/material.dart';
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();

    // Create configuration with credentials
    SingularConfig config = SingularConfig(
      'YOUR_SDK_KEY',
      'YOUR_SDK_SECRET'
    );

    // Enable debug logging
    config.enableLogging = true;
    config.logLevel = 4;

    // Set session timeout (in seconds)
    config.sessionTimeout = 60.0;

    // Initialize SDK
    Singular.start(config);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

詳細な設定の例

初期化時に複数の SDK 機能を設定するには、 start() を呼び出す前に、SingularConfig オブジェクトに 追加のプロパティを設定します。

Dart
import 'package:flutter/material.dart';
import 'package:singular_flutter_sdk/singular.dart';
import 'package:singular_flutter_sdk/singular_config.dart';
import 'package:singular_flutter_sdk/singular_link_params.dart';
import 'package:singular_flutter_sdk/singular_global_property.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    initializeSingularSDK();
  }

  void initializeSingularSDK() {
    // Create configuration with credentials
    SingularConfig config = SingularConfig(
      'YOUR_SDK_KEY',
      'YOUR_SDK_SECRET'
    );

    // User identification
    config.customUserId = 'user_123456';

    // Privacy settings
    config.limitDataSharing = false;
    
    // Deep linking handler
    config.singularLinksHandler = (SingularLinkParams params) {
      print('Deep link received: ${params.deeplink}');
      print('Passthrough params: ${params.passthrough}');
      print('Is deferred: ${params.isDeferred}');
      // Handle navigation based on deep link
    };

    // Short link timeout
    config.shortLinkResolveTimeOut = 10.0;

    // Facebook integration
    config.facebookAppId = 'YOUR_FACEBOOK_APP_ID';

    // SKAdNetwork settings (iOS)
    config.skAdNetworkEnabled = true;
    config.manualSkanConversionManagement = false;
    config.waitForTrackingAuthorizationWithTimeoutInterval = 30;

    // Conversion value callbacks (iOS)
    config.conversionValueUpdatedCallback = (int conversionValue) {
      print('Conversion value updated: $conversionValue');
    };

    config.conversionValuesUpdatedCallback = (int cv, int coarse, bool lock) {
      print('Fine: $cv, Coarse: $coarse, Locked: $lock');
    };

    // Global properties
    config.globalProperties = [
      SingularGlobalProperty('app_version', '2.5.0', true),
      SingularGlobalProperty('user_tier', 'premium', false)
    ];

    // Debugging
    config.enableLogging = true;
    config.logLevel = 4;

    // Session timeout
    config.sessionTimeout = 60.0;

    // Initialize SDK
    Singular.start(config);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

設定リファレンス:利用可能な設定オプションの完全な一覧については、 Flutter SDK 設定リファレンスを参照してください。

重要:Singular Reporting API Keyは絶対に使用しないでください。SDK統合 ページから取得したSDK固有の認証情報のみを使用してください。誤った認証情報を使用すると、データがSingularに送信されなくなります。

詳細設定

Google Ads iOS 統合コンバージョン測定に必要な設定

アプリで iOS 14.5 以降のユーザーを対象とした Google Ads キャンペーンを実行している場合、iOS 統合コンバージョン 測定 (ICM) をサポートするために、追加の SDK 設定手順が必要です。これには以下が含まれます:

  • Googleのオンデバイス測定(ODM)SDKの統合
  • Singular iOS SDK v12.8.1 以降への更新(Unity 版は v5.5.0 以降、Flutter/Cordova 版は v1.8.0 以降、React Native 版は v3.9.0 以降)
  • -ObjC リンカーフラグの追加および SingularConfig でのenableOdmWithTimeoutInterval の有効化

注: enableOdmWithTimeoutIntervalを有効にすると、 SDKの初期化が遅延し、 ディープリンクのコールバックが延期される可能性があります。 再作業を避けるため、SDKの初期実装時にこの設定を完了させてください。

iOS ICMの技術要件の詳細を参照