Android & iOS SDK 在 Flutter 中使用说明

最后更新于:2019-12-02 14:32:00

神策 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.1

执行 flutter packages get 命令安装插件

  flutter packages get

Flutter 官网文档

2. Android 端

在程序的入口 ApplicationonCreate() 中调用 SensorsDataAPI.startWithConfigOptions() 在主线程中初始化 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))        // 开启神策调试日志,默认关闭(调试时,可开启日志)。
                    .enableTrackAppCrash(); // 开启 crash 采集

            // 需要在主线程初始化神策 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;
        }
    }
}

3. iOS 端

在程序的入口(如 AppDelegate.m )中引入 SensorsAnalyticsSDK.h,并在初始化方法(如 - application:didFinishLaunchingWithOptions:launchOptions )中调用 startWithConfigOptions: 主线程同步初始化 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;
    // 需要在主线程中初始化 SDK
    [SensorsAnalyticsSDK startWithConfigOptions:options];
}

4. Flutter 中使用插件

在具体 dart 文件中导入 sensors_analytics_flutter_plugin.dart

import 'package:sensors_analytics_flutter_plugin/sensors_analytics_flutter_plugin.dart';

4.1 埋点事件

例如,触发事件名为 AddToFav ,对应的事件属性有:ProductID 和 UserLevel 的事件:

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

4.2 设置用户属性

例如,设置用户 Age 属性:

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