Flutter统计分析插件sc_statistics的使用
Flutter统计分析插件sc_statistics的使用
1.0.0
应省平台更新,变更比较大,请直接查看源码。
此版本不再需要 <code>Android 配置项</code>
,请移除 0.1.2 的配置项。
0.1.2 版本
Android 配置项
复制 <code>example/android/scstatistics</code>
目录至 <code>your project/android/</code>
目录下,并在 <code>your project/android/settings.gradle</code>
中添加 <code>include ':scstatistics'</code>
。
- 不要修改目录名字。
include ':app'
// 需要添加的
include ':scstatistics'
iOS 配置
在 <code>ios/Runner/Info.plist</code>
中添加以下内容,以解决依赖库里的 HTTP 请求正常:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>appmsapiscxrspt.sctvcloud.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
</dict>
</dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
使用示例
以下是完整的示例代码,展示如何使用 sc_statistics
插件进行统计分析。
示例代码
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:sc_statistics/sc_statistics.dart';
// 判断是否为 Android 平台
bool get _isAndroid => defaultTargetPlatform == TargetPlatform.android;
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData.light(useMaterial3: true),
darkTheme: ThemeData.dark(useMaterial3: true),
home: Scaffold(
appBar: AppBar(title: const Text('四川省平台信息集成模块')),
body: const SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(15.0),
child: HomePage(),
),
),
),
));
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
[@override](/user/override)
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
// 显示状态的文本
String text = '未初始化';
// 用户信息模型
SCSourceModel source =
SCSourceModel(userId: '100', sourceId: '1111111', sourceName: '标题');
// 应用 ID
String appId = 'your appId';
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// 显示状态的文本
Text(text),
const SizedBox(width: double.infinity, height: 15),
// 初始化插件按钮
ElevatedText(
onPressed: () async {
final SCInitialOptions model = SCInitialOptions(
appVersion: '1.0.0',
areaId: '0100',
appId: appId,
netType: NetType.wifi);
final bool data = await SCStatistics().setup(model);
text = 'setup: $data';
setState(() {});
},
text: 'setup',
),
// 设置网络类型按钮
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().setNetType('5G');
text = 'setNetType: $data';
setState(() {});
},
text: 'setNetType',
),
// 设置用户信息按钮
ElevatedText(
onPressed: () async {
final user = SCUserInfoModel(
appId: appId,
userCode: 'userCode',
userName: 'userName',
realName: 'realName',
status: 'status',
email: 'email',
tel: 'tel',
mobile: 'mobile',
headPic: 'headPic',
origin: 'origin',
sex: 1,
age: 25,
tag: 'tag',
other: 'other',
createTime: 'createTime',
extend: 'extend',
deleted: 'deleted');
final bool data = await SCStatistics().setUser(user);
text = 'setUser: $data';
setState(() {});
},
text: 'setUser',
),
// 应用启动事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().appStart('flutter');
text = 'appStart: $data';
setState(() {});
},
text: 'appStart',
),
// 应用停止事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics()
.appStop(DateTime.now().millisecondsSinceEpoch, 1000);
text = 'appStop: $data';
setState(() {});
},
text: 'appStop',
),
// 用户登录事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().login('100', LoginType.login);
text = 'login: $data';
setState(() {});
},
text: 'login',
),
// 访问资源事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().accessSource(SCAccessSourceModel(
userId: source.userId,
sourceId: source.sourceId,
sourceName: source.sourceName,
action: AccessAction.entry,
channelId: 'channelId',
timeLength: 10000,
sourceType: SourceType.newsVideo,
offTime: DateTime.now().millisecondsSinceEpoch.toString(),
path: 'path',
summary: 'summary',
sourceTag: 'sourceTag',
));
text = 'accessSource: $data';
setState(() {});
},
text: 'accessSource',
),
// 访问页面事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().accessPage(SCAccessPageModel(
userId: source.userId,
sourceId: source.sourceId,
sourceName: source.sourceName,
sourceType: SourceType.newsVideo,
action: AccessAction.entry,
channelId: 'channelId',
timeLength: 10000,
));
text = 'accessPage: $data';
setState(() {});
},
text: 'accessPage',
),
// 收藏资源事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().collect(
source: source,
sourceType: SourceType.newsVideo,
isCollect: true);
text = 'collect: $data';
setState(() {});
},
text: 'collect',
),
// 发表评论事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().comment(
source: source,
content: 'content',
sourceType: SourceType.newsVideo,
);
text = 'comment: $data';
setState(() {});
},
text: 'comment',
),
// 分享资源事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().forward(
source: source,
shareType: ShareType.weiBo,
sourceType: SourceType.newsVideo,
);
text = 'forward: $data';
setState(() {});
},
text: 'forward',
),
// 点赞资源事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().thumbsUp(
source: source,
isStar: true,
sourceType: SourceType.newsVideo,
);
text = 'thumbsUp: $data';
setState(() {});
},
text: 'thumbsUp',
),
// 搜索资源事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().search(
source.userId, source.sourceName);
text = 'search: $data';
setState(() {});
},
text: 'search',
),
// 视频播放事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().videoPlay(
source: source, contentLength: 60, isComplete: false);
text = 'videoPlay: $data';
setState(() {});
},
text: 'videoPlay',
),
// 上报事件
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().report(SCReportModel(
sourceContent: 'content',
title: 'title',
sourceType: SourceType.newsVideo,
userId: source.userId,
sourceId: source.sourceId));
text = 'report: $data';
setState(() {});
},
text: 'report',
),
// Android 特定的电视播放事件
if (_isAndroid)
ElevatedText(
onPressed: () async {
final bool data = await SCStatistics().tvPlay(
source: source,
heartbeatLength: 60,
liveType: LiveType.normal);
text = 'tvPlay: $data';
setState(() {});
},
text: 'tvPlay',
),
],
);
}
}
// 自定义按钮组件
class ElevatedText extends StatelessWidget {
const ElevatedText({Key? key, required this.onPressed, required this.text})
: super(key: key);
final VoidCallback onPressed;
final String text;
[@override](/user/override)
Widget build(BuildContext context) {
return ElevatedButton(onPressed: onPressed, child: Text(text));
}
}
更多关于Flutter统计分析插件sc_statistics的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter统计分析插件sc_statistics的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sc_statistics
是一个用于 Flutter 的统计分析插件,它可以帮助开发者轻松地在应用中集成统计分析功能,例如页面访问统计、事件统计、用户行为分析等。以下是如何使用 sc_statistics
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sc_statistics
插件的依赖:
dependencies:
flutter:
sdk: flutter
sc_statistics: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在应用的入口文件(通常是 main.dart
)中初始化 sc_statistics
插件。你需要在 main
函数中调用 ScStatistics.init()
方法:
import 'package:flutter/material.dart';
import 'package:sc_statistics/sc_statistics.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await ScStatistics.init(
appKey: 'YOUR_APP_KEY', // 替换为你的应用唯一标识
channel: 'default', // 渠道标识,可选
debug: true, // 是否开启调试模式
);
runApp(MyApp());
}
3. 页面访问统计
sc_statistics
可以自动统计页面的访问情况。你只需要在 MaterialApp
中使用 ScStatisticsObserver
:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: [ScStatisticsObserver()],
home: MyHomePage(),
);
}
}
4. 自定义事件统计
除了页面访问统计,你还可以使用 ScStatistics
来记录自定义事件。例如,记录用户点击某个按钮的次数:
ScStatistics.logEvent('button_click', parameters: {'button_id': 'login_button'});
5. 用户属性设置
你还可以设置用户属性,以便更好地分析用户行为:
ScStatistics.setUserProperty('age', '25');
ScStatistics.setUserProperty('gender', 'male');
6. 用户登录/登出统计
如果你的应用有用户登录功能,你可以使用以下方法来统计用户的登录和登出行为:
ScStatistics.login('user_id_123');
ScStatistics.logout();
7. 调试和测试
在开发阶段,你可以开启调试模式来查看统计数据的日志输出:
await ScStatistics.init(
appKey: 'YOUR_APP_KEY',
debug: true,
);
8. 发布应用
在发布应用之前,请确保关闭调试模式:
await ScStatistics.init(
appKey: 'YOUR_APP_KEY',
debug: false,
);