最近项目要集成移动统计,Flutter 项目的移动统计插件并不是很多。当然提起移动统计首先想到的是友盟,毕竟友盟在圈子里的熟知度还是有的,其次的选择还有TalkingData 这个也是做移动统计的。
经过百度一下,发现pub上已经有了友盟的插件,但是评分并不是很高;我去了友盟官网,发现友盟已经提供了Flutter插件,并且也给了集成文档,理所当然还是选择了友盟官网的集成方式。既然官网提供了文档我又为何多此一举写博客?我是真怕了,这文档还不如不给,自我感觉这文档太不清晰了,如果你按照文档完美集成了,那就不用看了,如果按照文档集成不下去了,欢迎来se se ,相信我 应该可以解决你的问题。
友盟集成
官方提供了集成文档https://developer.umeng.com/docs/119267/detail/174923。但是我尝试集成,能成功收集到活跃用户,新用户等信息,但是页面统计信息收集不到,同时android 10 机器无法进行集成测试,不能实时收集到统计信息。经过我通过跟客服的交流以及跟友盟技术人员的交流最终解决了问题。以下集成是按照最优方法集成的。(被文档坑坏了)
1.下载umeng_flutter_demo项目
地址:https://developer.umeng.com/docs/119267/detail/174923
找到umeng_flutter_demo 项目并下载
2.将umeng_flutter_demo 里的umeng_sdk项目导入到自己的项目里,跟android iOS项目同级
3.在项目pubspec.yaml文件里添加插件地址
umeng_sdk:
path: ./umeng_sdk/
4.mainActivity Application 里的代码还是按照官方文档集成
在AndroidManifest.xml设置权限、添加MainApplication/MyActivity、设置Appkey和Channel
<manifest>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application android:name=".MainApplication" ...>
<activity android:name=".MainActivity" ...>
</activity>
<meta-data
android:name="UMENG_APPKEY"
android:value="5e3f96f3cb23d2a070000048"/>
<meta-data
android:name="UMENG_CHANNEL"
android:value="Umeng"/>
</application>
...
</manifest>
拷贝并依据您的情况扩展MainApplication和MainActivity类,注意MainActivity中的onXXX方法必须继承
MainApplication类扩展
package com.example.umeng_sdk_example;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.flutter.app.FlutterApplication;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.analytics.MobclickAgent;
public class MainApplication extends FlutterApplication {
@Override
public void onCreate() {
super.onCreate();
UMConfigure.init(this, "5e3f96f3cb23d2a070000048", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, null);
UMConfigure.setLogEnabled(true);
android.util.Log.i("UMLog", "UMConfigure.init@MainApplication");
}
}
MainActivity类扩展
package com.example.umeng_sdk_example;
import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
import com.umeng.analytics.MobclickAgent;
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
com.example.umeng_sdk.UmengSdkPlugin.setContext(this);
android.util.Log.i("UMLog", "onCreate@MainActivity");
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
android.util.Log.i("UMLog", "onPause@MainActivity");
}
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
android.util.Log.i("UMLog", "onResume@MainActivity");
}
}
问题一
此时MainActivity里的umengSdkPlugin你会找不到
com.example.umeng_sdk.UmengSdkPlugin.setContext(this);
还需要将UmengSkdDemo里的UmengSdkPlugin 文件导入到自己的安卓项目里
问题二
此时运行项目安卓10 无法收集到移动统计信息
原因是UMeng_Sdk里的umeng-common-2.1.8.jar 版本太低,需要更换新的版本的,新版本的common.jar 在umeng官网的安卓sdk项目里,现在稳定版是umeng-common-9.1.6.jar。
现在可以把项目里umeng_sdk 里android 里 libs 下的两个jar 文件都删掉,把common-9.1.6.jar引入
问题三
此时你会报一个ameng初始化失败,缺少umeng_asms_x.x.x.aar库。
原因是,这个库原本是在umeng-analytics-8.1.4.jar里,但是呢这个umeng-analytics-8.1.4.jar 跟common.9.1.6 不兼容,所以必须删掉,删掉后就报错了,咋办呢,技术人员回复需要自行导入这个umeng_asms_armeabi-v1.1.3.aar库,这个库在umeng的Android项目里
将umeng_asms_armeabi-v1.1.3.aar库 导入到自己的安卓项目里别忘了在app下的build.gradle依赖一下
dependencies {
implementation(name:'umeng-asms-armeabi-v1.1.3', ext:'aar')
implementation(name:'umeng-crash-armeabi-v0.0.5', ext:'aar')
}
ok现在项目应该没问题里,能跑起来了。
问题四
安卓6设备可以集成测试,安卓10设备没有数据。
集成测试是umeng提供的能实时收集数据的一种测试环境,我的项目需要集成页面统计功能,如果现在统计数据,第二天才能看到数据,所以我必须搞集成测试,为了就是能实时收集到数据,但此时一点数据也收集不到,我又急了,哎,难受,继续跟友盟技术沟通 他们回复说要集成umeng-crash-armeabi-v0.0.5.aar,没错就是在上图看到的那个aar 集成后应该就能收集到测试数据了,(如果你不需要测试,完全不用导入这个aar,)
现在你应该可以用umeng了应该没啥问题了,sdk 都是最新版的。
抒发一下:友盟flutter集成文档看不懂,不清晰并且都是错的,他们技术都不清楚里面的步骤。不过友盟的客服跟技术是不错的,很有耐心,并且回复很快 赞!
集成友盟用了3天,真可怕,主要时间浪费在了沟通上,找技术还得提工单,反复折腾这么久,很失望啊。
由于这么麻烦领导让换了TalkingData,这个集成比较快,半小时就ok了,并且能实时收集数据,还是不错的,里面就是ios 的库是OC的,集成时需要转换为swift。
记录一下遇到的坑,如果友盟集成有问题随时可以联系我,只限于当前本版吧。