Flutter移动追踪插件dangple_mobile_tracker的使用

Flutter移动追踪插件dangple_mobile_tracker的使用

一个用于跟踪用户位置并监控步数和步行状态的Flutter插件。

特性

  • 实时监测步数。
  • 检测步行状态(如行走、停止)。
  • 完全兼容Flutter应用。
  • 简单的API集成步数和状态跟踪。

权限

确保应用程序请求Activity Recognition权限以跟踪步数。在你的AndroidManifest.xml文件中添加以下内容:

<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

使用

下面是一个使用dangple_mobile_tracker来显示步数和步行状态的示例应用:

import 'dart:async';

import 'package:dangple_mobile_tracker/dangple_mobile_tracker.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:pedometer/pedometer.dart';
import 'package:permission_handler/permission_handler.dart';

String formatDate(DateTime d) {
  return d.toString().substring(0, 19);
}

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late Stream<DangpleStepCount> _stepCountStream;
  late Stream<PedestrianStatus> _pedestrianStatusStream;
  String _status = '?', _steps = '?';

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

  void onStepCount(DangpleStepCount event) {
    if (kDebugMode) {
      print(event);
    }
    setState(() {
      _steps = event.steps.toString();
    });
  }

  void onPedestrianStatusChanged(PedestrianStatus event) {
    if (kDebugMode) {
      print(event);
    }
    setState(() {
      _status = event.status;
    });
  }

  void onPedestrianStatusError(error) {
    if (kDebugMode) {
      print('onPedestrianStatusError: $error');
    }
    setState(() {
      _status = 'Pedestrian Status not available';
    });
    if (kDebugMode) {
      print(_status);
    }
  }

  void onStepCountError(error) {
    if (kDebugMode) {
      print('onStepCountError: $error');
    }
    setState(() {
      _steps = 'Step Count not available';
    });
  }

  Future<bool> _checkActivityRecognitionPermission() async {
    bool granted = await Permission.activityRecognition.isGranted;

    if (!granted) {
      granted = await Permission.activityRecognition.request() == PermissionStatus.granted;
    }

    return granted;
  }

  Future<void> initPlatformState() async {
    bool granted = await _checkActivityRecognitionPermission();
    if (!granted) {
      // 告诉用户,该应用将无法正常工作
    }

    _pedestrianStatusStream = Pedometer.pedestrianStatusStream;

    (_pedestrianStatusStream.listen(onPedestrianStatusChanged)).onError(onPedestrianStatusError);

    _stepCountStream = DangplePedometer.stepCountStream;
    _stepCountStream.listen(onStepCount).onError(onStepCountError);

    if (!mounted) return;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Pedometer Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Text(
                'Steps Taken',
                style: TextStyle(fontSize: 30),
              ),
              Text(
                _steps,
                style: const TextStyle(fontSize: 60),
              ),
              const Divider(
                height: 100,
                thickness: 0,
                color: Colors.white,
              ),
              const Text(
                'Pedestrian Status',
                style: TextStyle(fontSize: 30),
              ),
              Icon(
                _status == 'walking'
                    ? Icons.directions_walk
                    : _status == 'stopped'
                        ? Icons.accessibility_new
                        : Icons.error,
                size: 100,
              ),
              Center(
                child: Text(
                  _status,
                  style: _status == 'walking' || _status == 'stopped'
                      ? const TextStyle(fontSize: 30)
                      : const TextStyle(fontSize: 20, color: Colors.red),
                ),
              )
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter移动追踪插件dangple_mobile_tracker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter移动追踪插件dangple_mobile_tracker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dangple_mobile_tracker 是一个用于移动应用中的用户行为追踪的 Flutter 插件。它可以帮助开发者收集用户在使用应用时的各种行为数据,如点击事件、页面浏览、会话时长等,从而为产品优化和用户行为分析提供数据支持。

安装

首先,你需要在 pubspec.yaml 文件中添加 dangple_mobile_tracker 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  dangple_mobile_tracker: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

配置

main.dart 中初始化插件:

import 'package:dangple_mobile_tracker/dangple_mobile_tracker.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化插件
  DangpleMobileTracker.init(
    apiKey: 'your_api_key',  // 替换为你的API Key
    enableDebugLogs: true,   // 是否启用调试日志
  );

  runApp(MyApp());
}

基本使用

1. 追踪页面浏览

在你的 StatefulWidgetStatelessWidget 中,使用 DangpleMobileTracker.trackPageView 来追踪页面浏览:

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    DangpleMobileTracker.trackPageView('/home');  // 追踪页面浏览

    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: Text('Welcome to Home Page!'),
      ),
    );
  }
}

2. 追踪事件

使用 DangpleMobileTracker.trackEvent 来追踪用户的自定义事件:

FloatingActionButton(
  onPressed: () {
    // 追踪事件
    DangpleMobileTracker.trackEvent(
      eventName: 'button_click',
      properties: {'button_id': 'fab', 'action': 'create_post'},
    );

    // 其他业务逻辑
  },
  child: Icon(Icons.add),
);

3. 设置用户属性

你可以使用 DangpleMobileTracker.setUserProperty 来设置用户属性:

DangpleMobileTracker.setUserProperty(
  key: 'user_role',
  value: 'premium_user',
);

4. 用户身份识别

使用 DangpleMobileTracker.identify 来识别用户:

DangpleMobileTracker.identify(userId: '123456');

高级功能

1. 会话管理

dangple_mobile_tracker 会自动追踪用户的会话时长,但你可以手动启动或结束会话:

// 手动启动会话
DangpleMobileTracker.startSession();

// 手动结束会话
DangpleMobileTracker.endSession();

2. 事件属性过滤

你可以在插件初始化时配置事件属性的过滤规则:

DangpleMobileTracker.init(
  apiKey: 'your_api_key',
  enableDebugLogs: true,
  eventFilter: (Map<String, dynamic> properties) {
    // 过滤掉某些属性
    return properties..remove('sensitive_data');
  },
);
回到顶部