Flutter友盟统计插件fl_umeng的使用
Flutter友盟统计插件 fl_umeng
的使用
友盟统计插件 fl_umeng
用于在Flutter应用中集成友盟统计功能。以下是如何使用该插件的详细步骤和示例代码。
前置条件
- 友盟APM性能监测如需直接使用,请参考fl_umeng_apm。
- 友盟超链请参考fl_umeng_link。
- 以上均基于
fl_umeng
,必须初始化友盟FlUMeng().init()
。
Android 配置
在 /android/app/build.gradle
文件中添加混淆配置:
android {
buildTypes {
release {
// 添加混淆配置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'consumer-rules.pro'
}
debug {
// 添加混淆配置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'consumer-rules.pro'
}
}
}
开始使用
注册友盟
首先需要注册友盟并进行初始化:
Future<void> init() async {
/// 注册友盟 统计 性能检测
final bool? data = await FlUMeng().init(
androidAppKey: '5f8fe2abfac90f1c19a8642e',
iosAppKey: '5f8fe4d4c1122b44acfc7aa7',
channel: 'channel');
print('UMeng 初始化成功 = $data');
}
设置用户账号
可以设置或取消用户的账号信息:
void fun() {
/// 是否开启log 仅支持 Android
FlUMeng().setLogEnabled(true);
/// 设置用户账号
FlUMeng().signIn('userID');
/// 取消用户账号
FlUMeng().signOff();
}
发送自定义事件
发送自定义事件(目前属性值支持字符、整数、浮点、长整数,暂不支持NULL、布尔、MAP、数组):
void fun() {
FlUMeng().onEvent('test', <String, String>{'test': 'test'});
}
页面统计
可以设置页面统计模式,并记录页面进入和离开的时间:
void fun() {
/// 设置是否自动采集;
FlUMeng().setPageCollectionMode(true);
/// 进入页面统计
FlUMeng().onPageStart('pageName');
/// 离开页面统计
FlUMeng().onPageEnd('pageName');
}
错误发送
仅支持Android平台的错误发送:
void fun() {
/// 错误发送 仅支持 Android
FlUMeng().reportError('error');
}
完整示例 Demo
以下是一个完整的示例,展示了如何在Flutter应用中使用 fl_umeng
插件:
import 'package:fl_umeng/fl_umeng.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
title: 'UMeng Example',
home: Scaffold(
appBar: AppBar(title: const Text('UMeng Example')),
body: SafeArea(
child: Container(
width: double.infinity,
padding: const EdgeInsets.symmetric(horizontal: 10),
child: _HomePage()),
))));
}
class _HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<_HomePage> {
String text = '';
@override
void initState() {
super.initState();
init();
}
/// 注册友盟
Future<void> init() async {
debugPrint('注册友盟');
final bool data = await FlUMeng().init(
androidAppKey: '5f8fe2abfac90f1c19a8642e',
iosAppKey: '5f8fe4d4c1122b44acfc7aa7',
channel: 'channel');
debugPrint('Umeng 初始化成功 = $data');
await FlUMeng().setLogEnabled(true);
}
@override
Widget build(BuildContext context) {
return Column(children: [
Container(
margin: const EdgeInsets.symmetric(vertical: 10),
width: double.infinity,
height: 130,
padding: const EdgeInsets.all(10),
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.black12, borderRadius: BorderRadius.circular(6)),
child: SingleChildScrollView(
child: Text(text, textAlign: TextAlign.center))),
Expanded(
child: SingleChildScrollView(
child: Wrap(
spacing: 5,
runSpacing: 5,
alignment: WrapAlignment.center,
children: buildVoid))),
]);
}
List<Widget> get buildVoid => [
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng().signIn('userId');
text = 'signIn $data';
setState(() {});
},
child: const Text('signIn')),
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng().signOff();
text = 'signOff $data';
setState(() {});
},
child: const Text('signOff')),
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng().onPageStart('pageStart');
text = 'onPageStart $data';
setState(() {});
},
child: const Text('onPageStart')),
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng().onPageEnd('pageEnd');
text = 'onPageEnd $data';
setState(() {});
},
child: const Text('onPageEnd')),
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng()
.onEvent('test', <String, String>{'test': 'test'});
text = 'onEvent $data';
setState(() {});
},
child: const Text('onEvent')),
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng().setPageCollectionMode(true);
text = 'setPageCollectionMode $data';
setState(() {});
},
child: const Text('setPageCollectionMode')),
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng().setLogEnabled(true);
text = 'logEnabled $data';
setState(() {});
},
child: const Text('logEnabled')),
if (defaultTargetPlatform == TargetPlatform.android)
ElevatedButton(
onPressed: () async {
final bool data = await FlUMeng().reportError('error');
text = 'reportError $data';
setState(() {});
},
child: const Text('reportError (仅支持 Android)'))
];
}
这个示例展示了如何在Flutter应用中集成友盟统计插件 fl_umeng
,包括初始化、用户登录/登出、发送自定义事件、页面统计以及错误报告等功能。希望对您有所帮助!
更多关于Flutter友盟统计插件fl_umeng的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter友盟统计插件fl_umeng的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用fl_umeng
插件进行友盟统计的示例代码。请注意,实际使用时,你需要根据具体的友盟后台配置和项目需求进行调整。
1. 添加依赖
首先,在你的Flutter项目的pubspec.yaml
文件中添加fl_umeng
依赖:
dependencies:
flutter:
sdk: flutter
fl_umeng: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android
修改android/app/src/main/AndroidManifest.xml
在AndroidManifest.xml
中添加友盟统计所需的权限和配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<!-- 其他配置 -->
<!-- 友盟统计权限 -->
<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"/>
<!-- 友盟统计Application配置 -->
<application
android:name=".MyApplication" <!-- 确保这里引用了自定义的Application类 -->
... >
<!-- 友盟统计Service配置 -->
<service
android:name="com.taobao.android.umeng.appanalyze.AppMonitorService"
android:exported="true"
android:process=":remote" />
<receiver android:name="com.taobao.android.umeng.appanalyze.AppMonitorReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
</application>
</manifest>
创建自定义Application类
在android/app/src/main/kotlin/com/example/yourapp/
(或Java目录)下创建MyApplication.kt
(或MyApplication.java
):
Kotlin:
package com.example.yourapp
import android.app.Application
import com.taobao.android.umeng.common.UMConfigure
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
// 初始化友盟统计
UMConfigure.init(this, "你的友盟AppKey", "Channel", UMConfigure.DEVICE_TYPE_PHONE, null)
}
}
Java:
package com.example.yourapp;
import android.app.Application;
import com.taobao.android.umeng.common.UMConfigure;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化友盟统计
UMConfigure.init(this, "你的友盟AppKey", "Channel", UMConfigure.DEVICE_TYPE_PHONE, null);
}
}
3. 配置iOS
在ios/Runner/Info.plist
中添加配置
如果你需要iOS统计,需要在Info.plist
中添加友盟所需的配置,但通常友盟iOS统计需要更多的配置和代码,这里仅展示基础的配置方式,具体请参考友盟官方文档。
配置iOS AppDelegate
在ios/Runner/AppDelegate.swift
(或AppDelegate.m
)中添加友盟统计的初始化代码:
Swift:
import UIKit
import Flutter
import fl_umeng // 导入fl_umeng插件
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
// 初始化友盟统计(需要确保fl_umeng插件支持iOS)
// 通常这一步由fl_umeng插件自动处理,但具体初始化代码可能需要参考插件文档
// 例如:UMConfigure.init(appKey: "你的友盟AppKey", channel: "Channel")
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
注意:由于Flutter插件的封装,通常不需要手动在iOS代码中调用友盟的初始化方法,这些通常由插件自动处理。但请确保你查阅了fl_umeng
插件的文档,以确认是否需要额外的iOS配置。
4. 在Flutter中使用友盟统计
在你的Flutter代码中,你可以使用fl_umeng
插件提供的API进行事件统计等操作。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:fl_umeng/fl_umeng.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter 友盟统计示例'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 自定义事件统计
FlUmeng.onEvent(eventId: "custom_event_id", attributes: {
"key1": "value1",
"key2": "value2",
});
},
child: Text('发送自定义事件'),
),
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,并在按钮点击时发送一个自定义事件到友盟统计。
注意事项
- 确保友盟AppKey正确:在初始化友盟统计时,确保你使用的AppKey是从友盟后台获取的,并且是正确的。
- 平台特定配置:对于iOS和Android平台,可能需要额外的配置,具体请参考友盟官方文档和
fl_umeng
插件的文档。 - 隐私政策:在使用统计功能时,请确保你的应用有合适的隐私政策,并告知用户将收集哪些数据以及如何使用这些数据。
希望这个示例能帮助你成功地在Flutter项目中使用fl_umeng
插件进行友盟统计。