Android & iOS SDK 在 Flutter 中使用说明

神策 sensors_analytics_flutter_plugin 外掛程式,封裝了神策 Android & iOS SDK 常用 API ,使用此外掛程式,可以在 Flutter 開發的 App 中完成埋點的統計上報。

1. 在專案中增加安裝外掛程式

在 Flutter 專案的 pubspec.yam 檔案中增加 sensors_analytics_flutter_plugin 依賴

dependencies:
  # 增加神策 flutter plugin 
  sensors_analytics_flutter_plugin: ^1.0.2
YML

執行 flutter packages get 命令安裝外掛程式

flutter packages get
BASH

Flutter 官網文件

2. Android 端

在程式的入口 Application 的 onCreate() 中呼叫 SensorsDataAPI.startWithConfigOptions() 在 Main Thread 中初始化 SDK:

import android.app.Application;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import com.sensorsdata.analytics.android.sdk.SensorsDataAPI;
import com.sensorsdata.analytics.android.sdk.SAConfigOptions;
import com.sensorsdata.analytics.android.sdk.SensorsAnalyticsAutoTrackEventType;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

public class App extends Application {

    // debug 模式的數據接收網址 (測試,測試專案)
    final static String SA_SERVER_URL_DEBUG = "【測試專案】數據接收網址";

    // release 模式的數據接收網址(發版,正式專案)
    final static String SA_SERVER_URL_RELEASE = "【正式專案】數據接收網址";


    @Override
    public void onCreate() {
        super.onCreate();
        // 在 Application 的 onCreate 初始化神策 SDK
        initSensorsDataSDK();
    }

    /**
     * 初始化 SDK 、開啟自動採集
     */
    private void initSensorsDataSDK() {
        try {
            // 設定 SAConfigOptions,傳入數據接收網址
            SAConfigOptions saConfigOptions = new SAConfigOptions(isDebugMode(this) ? SA_SERVER_URL_DEBUG : SA_SERVER_URL_RELEASE);

            // 透過 SAConfigOptions 設定神策 SDK 自動採集 options (Flutter 專案只支援 App 啟動、退出自動採集)
            saConfigOptions.setAutoTrackEventType(
                            SensorsAnalyticsAutoTrackEventType.APP_START | // 開啟自動採集 App 啟動事件
                            SensorsAnalyticsAutoTrackEventType.APP_END)   // 開啟自動採集 App 退出事件
                    .enableLog(isDebugMode(this)) 	// 開啟神策除錯 log,預設關閉(除錯時,可開啟 log)。
                    .enableTrackAppCrash(); // 開啟 crash 採集

            // 需要在 Main Thread 初始化神策 SDK
            SensorsDataAPI.startWithConfigOptions(this, saConfigOptions);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param context App 的 Context
     * @return debug return true,release return false
     * 用於判斷是 debug 包,還是 relase 包
     */
    public static boolean isDebugMode(Context context) {
        try {
            ApplicationInfo info = context.getApplicationInfo();
            return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}
JAVA

3. iOS 端

在程式的入口(如 AppDelegate.m )中引入 SensorsAnalyticsSDK.h,並在初始化方法(如 - application:didFinishLaunchingWithOptions:launchOptions )中呼叫 sharedInstanceWithConfig: 在 Main Thread 中初始化 SDK。

#import "SensorsAnalyticsSDK.h"

#ifdef DEBUG
#define SA_SERVER_URL @"<#【測試專案】數據接收網址#>"
#else
#define SA_SERVER_URL @"<#【正式專案】數據接收網址#>"
#endif

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [self initSensorsAnalyticsWithLaunchOptions:launchOptions];
    return YES;
}

- (void)initSensorsAnalyticsWithLaunchOptions:(NSDictionary *)launchOptions {
    // 設定神策 SDK 自動採集 options(Flutter 專案只支援 App 啟動、退出自動採集)
    SAConfigOptions *options = [[SAConfigOptions alloc] initWithServerURL:SA_SERVER_URL launchOptions:launchOptions];
    options.autoTrackEventType = SensorsAnalyticsEventTypeAppStart | SensorsAnalyticsEventTypeAppEnd;
    // 需要在 Main Thread 中初始化 SDK
    [SensorsAnalyticsSDK startWithConfigOptions:options];
}
CODE

4. Flutter 中使用外掛程式

在實際 dart 檔案中匯入 sensors_analytics_flutter_plugin.dart

import 'package:sensors_analytics_flutter_plugin/sensors_analytics_flutter_plugin.dart';
CODE

4.1 埋點事件

例如,觸發事件名為 AddToFav ,對應的事件屬性有:ProductID 和 UserLevel 的事件:

SensorsAnalyticsFlutterPlugin.track("AddToFav",{"ProductID":123456,"UserLevel":"VIP"});
CODE

4.2 設定用户屬性

例如,設定用戶 Age 屬性:

SensorsAnalyticsFlutterPlugin.profileSet({"Age":18});
CODE