Flutter华为分析插件huawei_analytics的使用

Flutter华为分析插件huawei_analytics的使用

简介

本插件允许华为分析SDK与Flutter平台进行通信。通过使用Analytics Kit,您可以深入了解用户、产品和内容。这些洞察可以帮助您以数据驱动的方式推广您的应用程序并优化产品。

功能

  • 跟踪和报告自定义事件。
  • 设置最多25个用户属性。
  • 自动收集事件和计算会话。
  • 预设事件ID和参数。

使用场景

  • 分析用户行为,包括预定义事件和自定义事件。
  • 使用受众构建来定制您的营销活动,以适应用户的习惯和偏好。
  • 利用仪表板和分析来衡量您的营销活动,并识别改进的领域。

安装

请参阅 pub.devAppGallery Connect Configuration 获取安装指南。

示例代码

以下是一个完整的示例代码,演示了如何在Flutter应用中使用huawei_analytics插件。

/*
    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.

    Licensed under the Apache License, Version 2.0 (the "License")
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        https://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

import 'package:flutter/material.dart';
import 'package:huawei_analytics/huawei_analytics.dart';

void main() {
  runApp(const MaterialApp(home: MyHomePage()));
}

class MyBtn extends StatelessWidget {
  final String title;
  final Function _onPress;

  const MyBtn(this.title, this._onPress, {Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.fromLTRB(3, 3, 3, 3),
      color: Colors.white,
      child: ElevatedButton(
        style: ElevatedButton.styleFrom(
          backgroundColor: Colors.grey,
        ),
        child: Text(
          title,
          style: const TextStyle(
            fontWeight: FontWeight.bold,
            color: Colors.white,
          ),
        ),
        onPressed: () async {
          _onPress();
        },
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final String _appTitle = '华为 HMS Analytics Flutter 示例';

  late HMSAnalytics hmsAnalytics;

  [@override](/user/override)
  void initState() {
    _init();
    super.initState();
  }

  void _init() async {
    hmsAnalytics = await HMSAnalytics.getInstance();
  }

  void _showDialog(String content) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('结果'),
          content: SingleChildScrollView(child: Text(content)),
          actions: [
            TextButton(
              child: const Text('关闭'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }

  Future<void> _onEnableLog() async {
    await hmsAnalytics.enableLog();
    _showDialog('启用日志成功');
  }

  Future<void> _onEnableLogWithLevel() async {
    // 可选级别:DEBUG, INFO, WARN, ERROR
    await hmsAnalytics.enableLogWithLevel('INFO');
    _showDialog('启用带级别日志成功');
  }

  Future<void> _setUserId() async {
    await hmsAnalytics.setUserId('userId');
    _showDialog('设置用户ID成功');
  }

  Future<void> _setUserProfile() async {
    await hmsAnalytics.setUserProfile('key', 'value');
    _showDialog('设置用户属性成功');
  }

  Future<void> _setPushToken() async {
    await hmsAnalytics.setPushToken('<your_token>');
    _showDialog('设置推送令牌成功');
  }

  Future<void> _setMinActivitySessions() async {
    await hmsAnalytics.setMinActivitySessions(1000);
    _showDialog('设置最小活动会话成功');
  }

  Future<void> _setSessionDuration() async {
    await hmsAnalytics.setSessionDuration(1000);
    _showDialog('设置会话时长成功');
  }

  Future<void> _onCustomEvent() async {
    String name = '我的自定义事件';

    Map<String, dynamic> customEvent = {
      'string_value': '分析',
      'integer_value': '42',
      'long_value': 4294967298,
      'double_value': 4.2,
      'boolean_value': true,
      // "list_of_integers": [1, 2, 3, 4, 5, 6, 10], // 您一次只能发送一个列表。
      'list_of_strings': ['华为', '分析'],
      'inner_bundle_example': {
        'string_val': 'hms',
        'int_val': 23,
      },
    };

    await hmsAnalytics.onEvent(name, customEvent);
    _showDialog('发送自定义事件成功');
  }

  Future<void> _onPredefinedEvent() async {
    String name = HAEventType.SUBMITSCORE;
    dynamic value = {
      HAParamType.SCORE: 12,
    };

    await hmsAnalytics.onEvent(name, value);
    _showDialog('发送预定义事件成功');
  }

  Future<void> _clearCachedData() async {
    await hmsAnalytics.clearCachedData();
    _showDialog('清除缓存数据成功');
  }

  Future<void> _setAnalyticsEnabled() async {
    await hmsAnalytics.setAnalyticsEnabled(true);
    _showDialog('设置分析启用成功');
  }

  Future<void> _getAAID() async {
    String? aaid = await hmsAnalytics.getAAID();
    _showDialog('AAID : $aaid');
  }

  Future<void> _getUserProfiles() async {
    Map<String, dynamic> profiles = await hmsAnalytics.getUserProfiles(true);
    _showDialog('用户属性 : $profiles');
  }

  Future<void> _pageStart() async {
    await hmsAnalytics.pageStart('页面名称', '页面类覆盖');
    _showDialog('开始页面成功');
  }

  Future<void> _pageEnd() async {
    await hmsAnalytics.pageEnd('页面名称');
    _showDialog('结束页面成功');
  }

  Future<void> _setReportPolicies() async {
    await hmsAnalytics.setReportPolicies(scheduledTime: 90);
    _showDialog('设置报告策略成功');
  }

  Future<void> _getReportPolicyThreshold() async {
    int? type = await hmsAnalytics
        .getReportPolicyThreshold(ReportPolicyType.ON_SCHEDULED_TIME_POLICY);
    _showDialog('获取报告策略阈值 $type');
  }

  Future<void> _isRestrictionEnabled() async {
    bool enabled = await hmsAnalytics.isRestrictionEnabled();
    _showDialog('是否启用限制 $enabled');
  }

  Future<void> _setRestrictionEnabled() async {
    await hmsAnalytics.setRestrictionEnabled(true);
    _showDialog('启用限制成功');
  }

  Future<void> _deleteUserProfile() async {
    await hmsAnalytics.deleteUserProfile('key');
    _showDialog('删除用户属性成功');
  }

  Future<void> _deleteUserId() async {
    await hmsAnalytics.deleteUserId();
    _showDialog('删除用户ID成功');
  }

  Future<void> _setCollectAdsIdEnabled() async {
    await hmsAnalytics.setCollectAdsIdEnabled(true);
    _showDialog('启用收集广告ID成功');
  }

  Future<void> _addDefaultEventParams() async {
    await hmsAnalytics.addDefaultEventParams(
      {
        '参数': '值',
      },
    );
    _showDialog('添加默认事件参数成功');
  }

  Future<void> _setChannel() async {
    await hmsAnalytics.setChannel('AppGallery');
    _showDialog('设置渠道成功');
  }

  Future<void> _setPropertyCollection() async {
    await hmsAnalytics.setPropertyCollection('userAgent', true);
    _showDialog('设置属性收集成功');
  }

  Future<void> _setCustomReferrer() async {
    await hmsAnalytics.setCustomReferrer('自定义引用');
    _showDialog('设置自定义引用成功');
  }

  Future<void> _getDataUploadSiteInfo() async {
    String? dataUploadSiteInfo = await hmsAnalytics.getDataUploadSiteInfo();
    _showDialog('数据上传站点信息 : $dataUploadSiteInfo');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(_appTitle),
        backgroundColor: Colors.blue,
      ),
      body: SingleChildScrollView(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            MyBtn('启用日志', _onEnableLog),
            MyBtn('启用带级别日志', _onEnableLogWithLevel),
            MyBtn('设置用户ID', _setUserId),
            MyBtn('设置用户属性', _setUserProfile),
            MyBtn('设置推送令牌', _setPushToken),
            MyBtn('设置最小活动会话', _setMinActivitySessions),
            MyBtn('设置会话时长', _setSessionDuration),
            MyBtn('发送自定义事件', _onCustomEvent),
            MyBtn('发送预定义事件', _onPredefinedEvent),
            MyBtn('清除缓存数据', _clearCachedData),
            MyBtn('删除用户属性', _deleteUserProfile),
            MyBtn('删除用户ID', _deleteUserId),
            MyBtn('设置分析启用', _setAnalyticsEnabled),
            MyBtn('获取AAID', _getAAID),
            MyBtn('获取用户属性', _getUserProfiles),
            MyBtn('开始页面', _pageStart),
            MyBtn('结束页面', _pageEnd),
            MyBtn('设置报告策略', _setReportPolicies),
            MyBtn('获取报告策略阈值', _getReportPolicyThreshold),
            MyBtn('启用限制', _setRestrictionEnabled),
            MyBtn('是否启用限制', _isRestrictionEnabled),
            MyBtn('启用收集广告ID', _setCollectAdsIdEnabled),
            MyBtn('添加默认事件参数', _addDefaultEventParams),
            MyBtn('设置渠道', _setChannel),
            MyBtn('设置属性收集', _setPropertyCollection),
            MyBtn('设置自定义引用', _setCustomReferrer),
            MyBtn('获取数据上传站点信息', _getDataUploadSiteInfo),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter华为分析插件huawei_analytics的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter华为分析插件huawei_analytics的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用huawei_analytics插件的详细步骤和代码示例。huawei_analytics插件允许你集成华为分析服务,以收集和分析应用数据。

前提条件

  1. 注册华为开发者账号:首先,你需要在华为开发者网站注册一个开发者账号。
  2. 创建应用并获取AGConnect Services配置文件:在华为开发者控制台创建一个应用,并下载agconnect-services.json文件。

安装插件

在你的Flutter项目根目录下,打开pubspec.yaml文件,并添加huawei_analytics依赖:

dependencies:
  flutter:
    sdk: flutter
  huawei_analytics: ^版本号 # 请替换为最新版本号

然后运行以下命令安装依赖:

flutter pub get

配置项目

  1. agconnect-services.json文件放到你的Flutter项目根目录的android/app/文件夹中

  2. android/build.gradle文件中添加华为的Maven仓库地址

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://developer.huawei.com/repo/' }
    }
}
  1. android/app/build.gradle文件中应用AGConnect服务插件
apply plugin: 'com.huawei.agconnect'

初始化并使用华为分析服务

以下是一个简单的Flutter应用示例,展示如何初始化并使用华为分析服务:

import 'package:flutter/material.dart';
import 'package:huawei_analytics/huawei_analytics.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Huawei Analytics Demo'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    // 初始化华为分析服务
    _initAnalytics();
  }

  Future<void> _initAnalytics() async {
    try {
      // 初始化Analytics实例
      await Analytics.instance.init();
      print("Huawei Analytics initialized successfully.");
    } catch (e) {
      print("Failed to initialize Huawei Analytics: $e");
    }
  }

  void _logEvent() {
    // 创建一个事件并设置参数
    Map<String, dynamic> eventParams = {
      'level': 'info',
      'message': 'User performed an action',
    };

    // 记录事件
    Analytics.instance.logEvent(name: 'user_action', parameters: eventParams);
    print("Event logged: user_action");
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Click the button to log an event to Huawei Analytics.'),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _logEvent,
          child: Text('Log Event'),
        ),
      ],
    );
  }
}

运行应用

确保你已经正确配置了所有内容,然后运行你的Flutter应用:

flutter run

当你点击按钮时,事件将被记录到华为分析服务中。你可以在华为开发者控制台查看和分析这些数据。

这个示例展示了如何初始化华为分析服务并记录一个简单的事件。根据你的应用需求,你可以记录更多类型的事件并设置相应的参数。更多详细信息和高级用法,请参考华为分析服务官方文档

回到顶部