init static method

Future<void> init({
  1. required String? serverUrl,
  2. Set<SAAutoTrackType>? autoTrackTypes,
  3. Set<SANetworkType>? networkTypes,
  4. int flushInterval = 15000,
  5. int flushBulkSize = 100,
  6. bool enableLog = false,
  7. bool javaScriptBridge = false,
  8. bool encrypt = false,
  9. AndroidConfig? android,
  10. IOSConfig? ios,
  11. VisualizedConfig? visualized,
  12. bool heatMap = false,
  13. Map? globalProperties,
})

初始化神策 SDK。 用户需要尽可能早的调用该初始化方法,建议在 main() 方法中,不过至少要保证 Flutter 项目这段代码执行完毕:

WidgetsFlutterBinding.ensureInitialized()

参考示例如下:

void main(){
  WidgetsFlutterBinding.ensureInitialized();
  SensorsAnalyticsFlutterPlugin.init(...);
  runApp(MyApp());
}

如果你不用 Flutter 全埋点功能,也可以放在合适位置进行初始化。另外如果 Native 中也执行了初始化,会以最先执行的为准。

参数定义如下:
serverUrl: 数据接收地址
autoTrackTypes: 全埋点类型
networkTypes: 数据上报的网络条件
flushInterval: 数据上报的时间间隔,单位是毫秒,默认是 1500ms
flushBulkSize:触发上报逻辑的事件数目,默认是 100 条
enableLog:是否开启本地 log,该配置只在 debug 阶段有效
javaScriptBridge: 是否支持 H5 打通,Android 中需要和 AndroidConfig.jellybean 配合使用
encrypt: 是否支持加密,Flutter 中初始化只支持 RSA+AES 加密
android: Android 部分特有的配置
ios: iOS 部分特有的配置
visualized: 可视化全埋点部分特有的配置,Flutter 暂不支持可视化,该配置会影响 Native
heatMap: 是否开启点击图,Flutter 暂不支持点击分析功能,该配置会影响 Native

Implementation

static Future<void> init(
    {required String? serverUrl,
    Set<SAAutoTrackType>? autoTrackTypes,
    Set<SANetworkType>? networkTypes,
    int flushInterval = 15000,
    int flushBulkSize = 100,
    bool enableLog = false,
    bool javaScriptBridge = false,
    bool encrypt = false,
    AndroidConfig? android,
    IOSConfig? ios,
    VisualizedConfig? visualized,
    bool heatMap = false,
    Map? globalProperties}) async {
  Map<String, dynamic> initConfig = {
    "serverUrl": serverUrl ??
        () {
          assert(() {
            print("Server Url is empty, SDK will not upload data. You can call 'setServerUrl()' to set it later.");
            return true;
          }());
          return "";
        }(),
    "enableLog": enableLog,
    "javaScriptBridge": javaScriptBridge,
    "encrypt": encrypt,
    "heatMap": heatMap,
    "flushInterval": flushInterval,
    "flushBulkSize": flushBulkSize,
    if (android != null) "android": android.map,
    if (ios != null) "ios": ios.map,
    if (visualized != null) "visualized": visualized.map,
  };

  if (autoTrackTypes != null) {
    int result = 0;
    autoTrackTypes.forEach((element) {
      switch (element) {
        case SAAutoTrackType.NONE:
          result |= 0;
          break;
        case SAAutoTrackType.APP_START:
          result |= 1;
          break;
        case SAAutoTrackType.APP_END:
          result |= 1 << 1;
          break;
        case SAAutoTrackType.APP_CLICK:
          result |= 1 << 2;
          break;
        case SAAutoTrackType.APP_VIEW_SCREEN:
          result |= 1 << 3;
          break;
      }
    });
    initConfig["autotrackTypes"] = result;
  }

  if (networkTypes != null && networkTypes.isNotEmpty) {
    int result = 0;
    networkTypes.forEach((element) {
      switch (element) {
        case SANetworkType.TYPE_NONE:
          result |= 0;
          break;
        case SANetworkType.TYPE_2G:
          result |= 1;
          break;
        case SANetworkType.TYPE_3G:
          result |= 1 << 1;
          break;
        case SANetworkType.TYPE_4G:
          result |= 1 << 2;
          break;
        case SANetworkType.TYPE_5G:
          result |= 1 << 4;
          break;
        case SANetworkType.TYPE_WIFI:
          result |= 1 << 3;
          break;
        case SANetworkType.TYPE_ALL:
          result |= 0xFF;
          break;
      }
    });
    initConfig["networkTypes"] = result;
  }
  //全局公共属性配置
  initConfig["globalProperties"] = globalProperties;
  await _channel.invokeMethod("init", [initConfig]);
}