Flutter应用集成插件flutter_appcenter_bundle的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter应用集成插件flutter_appcenter_bundle的使用

概述

flutter_appcenter_bundle 插件集成了 AppCenter 的分析、崩溃报告和分发功能。本文将介绍如何在 Flutter 应用中集成此插件,并提供完整的示例代码。

相关链接

开始前的准备工作

首先,你需要在 AppCenter 注册你的应用并获取相应的 appSecret

构建配置

由于 AppCenter 分发存在与 Google Play 发布相关的问题,建议为不同的发布渠道设置不同的构建风味(flavor):

flutter build --flavor googlePlay  # 用于 Google Play
flutter build --flavor appCenter   # 用于 AppCenter

android/app/build.gradle 中添加以下配置:

android {
    ...
    
    flavorDimensions "distribute"
    productFlavors {
        appCenter {
            dimension "distribute"
        }

        googlePlay {
            dimension "distribute"
        }
    }

    lintOptions {
        disable 'InvalidPackage'
        checkReleaseBuilds false
    }
}

如果你已经有其他风味设置,可以参考下面的例子合并它们:

android {
    flavorDimensions "dummy", "distribute"
    productFlavors {
        dummyFoo {
            dimension "dummy"
        }
        dummyBar {
            dimension "dummy"
        }
        appCenter {
            dimension "distribute"
        }

        googlePlay {
            dimension "distribute"
        }
    }
}

注意:遇到本地构建问题时,请先尝试运行示例项目进行排查。

使用方法

基本用法

在你的 Dart 文件中导入插件并调用 startAsync 方法启动服务:

import 'package:flutter_appcenter_bundle/flutter_appcenter_bundle.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  await AppCenter.startAsync(
    appSecretAndroid: '******', // 替换为你的 Android appSecret
    appSecretIOS: '******',     // 替换为你的 iOS appSecret
    enableAnalytics: true,      // 是否启用分析,默认为true
    enableCrashes: true,        // 是否启用崩溃报告,默认为true
    enableDistribute: false,    // 是否启用分发,默认为false
    usePrivateDistributeTrack: false, // 是否使用私有分发轨道,默认为false
    disableAutomaticCheckForUpdate: false, // 是否禁用自动检查更新,默认为false
  );
  
  runApp(MyApp());
}

// 跟踪事件
AppCenter.trackEventAsync('my event', <String, String>{
  'prop1': 'value1',
  'prop2': 'value2',
});

运行时开启或关闭功能

你可以在运行时动态地开启或关闭某些功能:

await AppCenter.configureAnalyticsAsync(enabled: true);
await AppCenter.configureCrashesAsync(enabled: true);
await AppCenter.configureDistributeAsync(enabled: true);
await AppCenter.configureDistributeDebugAsync(enabled: true); // 仅限 Android
await AppCenter.checkForUpdateAsync(); // 手动检查更新

示例代码

以下是完整的示例代码,展示了如何集成 flutter_appcenter_bundle 并显示一些基本信息:

import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart';
import 'package:flutter_appcenter_bundle/flutter_appcenter_bundle.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await AppCenter.startAsync(
    appSecretAndroid: '49361c2e-b788-4bc2-a33d-838b04b3e06b',
    appSecretIOS: '2da3d93f-6b3f-48f9-920f-2d63ae3cd25a',
    enableDistribute: false,
  );
  await AppCenter.configureDistributeDebugAsync(enabled: false);

  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    AppCenter.trackEventAsync('_MyAppState.initState');
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Container(
          padding: EdgeInsets.all(20),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              const PackageInfoContent(),
              const SizedBox(height: 8.0),
              FutureBuilder(
                future: AppCenter.isCrashesEnabledAsync(),
                builder: (_, AsyncSnapshot<bool?> snapshot) {
                  if (snapshot.hasData) {
                    final isCrashesEnabled = snapshot.data!;

                    return Text('IsCrashesEnabled: $isCrashesEnabled');
                  }

                  return const CircularProgressIndicator.adaptive();
                },
              ),
              const SizedBox(height: 8.0),
              FutureBuilder(
                future: AppCenter.isAnalyticsEnabledAsync(),
                builder: (_, AsyncSnapshot<bool?> snapshot) {
                  if (snapshot.hasData) {
                    final isAnalyticsEnabled = snapshot.data!;

                    return Text('IsAnalyticsEnabled: $isAnalyticsEnabled');
                  }

                  return const CircularProgressIndicator.adaptive();
                },
              ),
              const SizedBox(height: 8.0),
              FutureBuilder(
                future: AppCenter.isDistributeEnabledAsync(),
                builder: (_, AsyncSnapshot<bool?> snapshot) {
                  if (snapshot.hasData) {
                    final isDistributeEnabled = snapshot.data!;

                    return Text('IsDistributeEnabled: $isDistributeEnabled');
                  }

                  return const CircularProgressIndicator.adaptive();
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class PackageInfoContent extends StatelessWidget {
  const PackageInfoContent();

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: PackageInfo.fromPlatform(),
      builder: (_, AsyncSnapshot<PackageInfo> snapshot) {
        if (snapshot.hasData) {
          final packageInfo = snapshot.data!;

          return Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('App name:\n${packageInfo.appName}'),
              const SizedBox(height: 8.0),
              Text('Package name:\n${packageInfo.packageName}'),
              const SizedBox(height: 8.0),
              Text('Version:\n${packageInfo.version}'),
              const SizedBox(height: 8.0),
              Text('Build:\n${packageInfo.buildNumber}'),
            ],
          );
        }

        return const CircularProgressIndicator.adaptive();
      },
    );
  }
}

故障排除

  • iOS: CocoaPods could not find compatible versions for pod "AppCenter"

    删除 Podfile.lock 文件后重新构建,这是升级 iOS 原生依赖时常见的问题。

  • Android 构建问题

    • 确保 example 项目能够成功构建。
    • 检查 gradle-wrapper.properties 中的 Gradle 版本。
    • 检查 build.gradle 中的 Kotlin 版本、compileSdkVersioncom.android.tools.build:gradle 版本。
    • 参考 issue 设置 lintOptions
  • jcenter 退役

    jcenter 将于 2021 年 5 月 1 日退役,需替换为 mavenCentral()

repositories {
     google()
     mavenCentral()
     gradlePluginPortal()
}

更多关于Flutter应用集成插件flutter_appcenter_bundle的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用集成插件flutter_appcenter_bundle的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中集成flutter_appcenter_bundle插件,可以方便地与Visual Studio App Center进行集成,从而管理应用的分发、崩溃报告、用户分析等。以下是一个具体的代码案例,展示如何在Flutter项目中集成和使用flutter_appcenter_bundle插件。

步骤 1:添加依赖

首先,在你的pubspec.yaml文件中添加flutter_appcenter_bundle依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_appcenter_bundle: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

步骤 2:配置App Center

在集成插件之前,你需要在App Center中创建一个应用,并获取应用的App Secret和App ID。

步骤 3:初始化插件

在你的Flutter项目的入口文件(通常是lib/main.dart)中,初始化flutter_appcenter_bundle插件。

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

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

  // 初始化App Center
  FlutterAppCenterBundle.start(
    appSecret: '你的App Secret', // 替换为你的App Secret
    appId: '你的App ID',         // 替换为你的App ID
    services: [
      AppCenterService.analytics,
      AppCenterService.crashes,
      // 可以根据需要添加其他服务,如distribute
    ],
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter AppCenter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter AppCenter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '集成App Center成功',
              style: TextStyle(fontSize: 24),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 示例:发送一个自定义事件到App Center Analytics
          FlutterAppCenterBundle.trackEvent(
            eventName: 'custom_event',
            properties: {
              'key1': 'value1',
              'key2': 'value2',
            },
          );
        },
        tooltip: 'Send Event',
        child: Icon(Icons.send),
      ),
    );
  }
}

步骤 4:运行应用

现在,你可以运行你的Flutter应用。如果配置正确,应用启动时会初始化App Center,并可以发送崩溃报告和自定义事件到App Center。

注意事项

  1. 确保App Secret和App ID正确:错误的App Secret或App ID会导致插件无法正常工作。
  2. 权限配置:在Android和iOS项目中,确保配置了必要的权限和设置,以便插件能够正常工作。
  3. 版本兼容性:检查flutter_appcenter_bundle插件的最新版本是否兼容你的Flutter SDK版本。

以上就是在Flutter应用中集成flutter_appcenter_bundle插件的详细步骤和代码示例。希望这对你有所帮助!

回到顶部