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

1 回复

更多关于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,
);
回到顶部