任務:flutter集成友盟統(tǒng)計并有異常上報功能
但是友盟不支持flutter的異常上報,所以現(xiàn)在的策略是,先集成友盟的基礎(chǔ)行為統(tǒng)計,再集成bugly的異常上報功能
下圖為友盟不支持的證據(jù):

image.png
由于友盟官網(wǎng)flutter集成文檔寫的有些太粗獷,為了避免可愛們蒙蔽,所以我決定 出一份集成教程。
前期準備: (我的操作系統(tǒng)是Mac)
-
集成【友盟+】SDK之前,您首先需要到 【友盟+】官網(wǎng),注冊賬號并且添加一個ios和一個Android新應用,獲得
AppKey。(集成要用)
image.png
image.png 新建
flutter項目(我是新建了一個flutter項目,所以建議你們也先新建項目,跟著我的教程集成沒問題了再集成到自己項目里)并且有裝cocoapods安裝了
xcode開發(fā)工具并安裝了cocoapods第三方庫管理工具(不會的自行Google哈)
1.去官網(wǎng)下載umeng_flutter_demo.zip

image.png
2.雙擊解壓下載的 umeng_flutter_demo,將根目錄下的umeng_sdk文件夾拷貝到你自己項目的根目錄下

image.png

image.png
3.在pubspec.yaml中引入插件如下:
umeng_sdk:
path: ./umeng_sdk/

image.png
4.修改umeng_sdk/ios文件夾下umeng_sdk.podspec內(nèi)容如下:
s.dependency 'UMCCommon' , '2.1.4'
s.dependency 'UMCAnalytics', '6.1.0'

image.png
5.找到工程main.dart文件,導入友盟sdk頭文件并添加如下代碼并運行項目
import 'package:umeng_sdk/umeng_sdk.dart';
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
// This call to setState tells the Flutter framework that something has
// changed in this State, which causes it to rerun the build method below
// so that the display can reflect the updated values. If we changed
// _counter without calling setState(), then the build method would not be
// called again, and so nothing would appear to happen.
_counter++;
});
UmengSdk.onEvent('bool', {'name':'jack', 'age':18, 'male':true});
}

image.png
6.在終端運行如下命令生成對應的iOS平臺代碼
flutter build ios --no-codesign

image.png
這一步會報錯

image.png
platform version錯誤,解決方法是修改項目里的
ios/Podfile文件:
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
platform :ios, '8.0' #增加的內(nèi)容

image.png
再次運行終端命令:
flutter build ios --no-codesign,依然報錯
image.png
解決辦法是再次打開iOS目錄下的
Podfile,注釋或刪除 use_frameworks!
image.png
重新運行終端命令:
flutter build ios --no-codesign即可pod成功
image.png
7.開始ios端APPID配置~

image.png
command+B編譯一下報錯 如圖:
image.png
原因是需要給你的工程指定一個Team 解決辦法如下:

image.png
再次按
command + B編譯,successded~~
8.找到AppDelegate文件,加入iOS的初始化代碼
由于我是swift語言,所以我需要先在橋接文件中導入頭文件(Object-C語言不需要這一步哈)
#import <UMCommonLog/UMCommonLogHeaders.h>
#import <UMCommon/UMConfigure.h>

image.png
下面是Swift和OC端各自需要配置的代碼,大家對號入座~:
- swift版本:找到
AppDelegate.swift文件,加入iOS的初始化代碼
UMCommonLogManager.setUp()
UMConfigure.setLogEnabled(true)
UMConfigure.initWithAppkey("5861e5daf5ade41326001eab", channel: "App Store")

image.png
- oc版本:找到
AppDelegate.m文件,加入iOS的初始化代碼
#import "GeneratedPluginRegistrant.h"
#import <UMCommonLog/UMCommonLogHeaders.h>
#import <UMCommon/UMConfigure.h>
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[UMCommonLogManager setUpUMCommonLogManager];
[UMConfigure setLogEnabled:YES];
[UMConfigure initWithAppkey:@"5861e5daf5ade41326001eab" channel:@"App Store"];
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
9.測試ios端集成是否成功:
-
全局搜索
UMengflutterpluginForAnalytics,并在[MobClick event:eventName attributes:properties];處打斷點
image.png 運行xcode工程,并點擊屏幕右下角按鈕,如果斷點走了,則代表集成成功
-
調(diào)試成功如下:
image.png
ios端集成demo地址
高級功能
Android與iOS都適用
// 發(fā)送自定義事件(目前屬性值支持字符、整數(shù)、浮點、長整數(shù),暫不支持NULL、布爾、MAP、數(shù)組)
UmengSdk.onEvent("VideoPlay", {"userID":"神秘賬號", "channel":"wx", "playTime":10});
// 設(shè)置用戶賬號
UmengSdk.onProfileSignIn("user_id");
// 取消用戶賬號
UmengSdk.onProfileSignOff();
// 如果需要使用頁面統(tǒng)計,則先打開該設(shè)置
UmengSdk.setPageCollectionModeManual();
// 進入頁面統(tǒng)計
UmengSdk.onPageStart("viewName");
// 離開頁面統(tǒng)計
UmengSdk.onPageEnd("viewName");
// 如果不需要上述頁面統(tǒng)計,在完成后可關(guān)閉該設(shè)置;如果沒有用該功能可忽略;
UmengSdk.setPageCollectionModeAuto();
// 錯誤發(fā)送
UmengSdk.reportError("后臺程序執(zhí)行時間過長");
//頁面采集
可參考 lib/umeng_navigator_observer.dart 實現(xiàn)頁面監(jiān)控跳轉(zhuǎn);
看到這里恭喜你已經(jīng)成功了一半啦撒花花???,不要松懈,下面我們開始集成Android端~(不好意思 Android端暫時擱淺)



