对于友盟在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()
就可以了
网友评论