init static method
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,
初始化神策 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]);
}