美文网首页
Flutter 集成友盟 深坑

Flutter 集成友盟 深坑

作者: BeRicher | 来源:发表于2020-11-01 10:52 被阅读0次

对于友盟在Flutter上的集成,官方虽然给出了sdk(https://developer.umeng.com/sdk/flutter),但是不好使,是真的不好使,不信的可以去试试,安卓费劲调好以后,ios又跑不起来。

最后跑到pub.dev按时间排序从第一位开始试,最后发现下面这个还是不错的,集成进去就可以用。

https://pub.dev/packages/umeng


但是安卓这边有个坑,打开以后不发送日志,导致友盟控制台一直显示未集成。

曲线救国,最后发现调用userSignIn或userSignOut会发送日志。

但是signIn以后需要signOut,signOut后需要signIn,单独调用一个是没法一直发送启动日志的。

所以需要将上次是调用了signOut还是signIn记录一下,保证这次的调用与上次不同。

代码如下:

Future<String> initAndroidDeviceId() async {
  print("初始化设备id");
  DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
  AndroidDeviceInfo androidDeviceInfo = await deviceInfo.androidInfo;
  print("初始化自定义设备结束,id为:" + androidDeviceInfo.androidId);
  return androidDeviceInfo.androidId;
}  

void initUmeng() async {
 print("初始化友盟开始");
  await Umeng.init(
    androidKey: BuildParam.androidU,
    iosKey: BuildParam.iosU,
    onlineParamEnabled: true,
    logEnabled: true,
    channel: BuildParam.appName,
  );

  if (!Platform.isAndroid) {
    print("初始化友盟结束");
    return;
  }
  //安卓系统特殊处理
  String deviceId = await initAndroidDeviceId();
  //上次是否是登录操作
  bool lastSignIn = SpUtil.getBool("last_is_sign_in");
  if (lastSignIn) {
    print("上次为登录操作,本次为注销操作");
    Umeng.onProfileSignOff();
    SpUtil.putBool("last_is_sign_in", false);
  } else {
    print("上次为注销操作,本次为登录操作");
    Umeng.onProfileSignIn(deviceId);
    SpUtil.putBool("last_is_sign_in", true);
  }
  print("初始化友盟结束");
}

使用时,直接使用initUmeng()就可以了

相关文章

网友评论

      本文标题:Flutter 集成友盟 深坑

      本文链接:https://www.haomeiwen.com/subject/ncyyvktx.html