Flutter应用集成插件appcenter_bundle的使用

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

Flutter应用集成插件appcenter_bundle的使用

概述

此插件目前集成了AppCenter的分析(analytics)、崩溃报告(crashes)和分发(distribute)功能。

使用说明

开始使用

首先,访问 AppCenter 并注册你的应用。

详细的AppCenter API参考文档可查看 AppCenter文档

构建

AppCenter分发在发布到Google Play时存在一些问题。为了解决这个问题,可以使用以下命令进行构建:

flutter build --flavor googlePlay

对于AppCenter,则使用:

flutter build --flavor appCenter

flutter build apk 命令将在 build/app/outputs/flutter-apk 目录下同时生成两个版本,前提是需要在 android/app/build.gradle 文件中添加以下部分:

android {
  ...

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

      googlePlay {
          dimension "distribute"
      }
  }

  // 这可能需要,详见 https://github.com/flutter/flutter/issues/58247
  lintOptions {
      disable 'InvalidPackage'
      checkReleaseBuilds false
  }
}

如果你已经有flavor设置并想合并它们,请检查示例项目。请注意,flavor维度是正交的。你可能只想重用分发(distribute)flavor以获得最佳的构建性能。详情请参阅 这篇文章

在解决本地构建问题时,建议先尝试运行示例项目。

使用方法

基本用法
import 'package:appcenter_bundle/appcenter_bundle.dart';

await AppCenter.startAsync(
    appSecretAndroid: '******',
    appSecretIOS: '******',
    enableAnalytics: true, // 默认值为true
    enableCrashes: true, // 默认值为true
    enableDistribute: true, // 默认值为false
    usePrivateDistributeTrack: false, // 默认值为false
    disableAutomaticCheckForUpdate: false, // 默认值为false
  );

AppCenter.trackEventAsync('my event', {'prop1': 'prop1', 'prop2': 'prop2'});
动态启用/禁用功能
await AppCenter.configureAnalyticsAsync(enabled: true);

await AppCenter.configureCrashesAsync(enabled: true);

await AppCenter.configureDistributeAsync(enabled: true);

await AppCenter.configureDistributeDebugAsync(enabled: true); // 仅适用于Android

await AppCenter.checkForUpdateAsync(); // 手动检查更新

故障排除

  • iOS: [!] CocoaPods无法找到与pod "AppCenter"兼容的版本

    解决方法:手动删除 podfile.lock 文件并重新构建。这是在升级iOS原生依赖项时常见的问题。

  • Android构建问题

    首先检查示例项目是否能成功构建。 如果不能构建,请报告问题。 如果可以构建,请检查Gradle设置。关键点包括:

    • gradle-wrapper.properties 中的Gradle版本
    • build.gradle 中的Kotlin版本
    • build.gradle 中的 compileSdkVersion
    • build.gradle 中的 com.android.tools.build:gradle 版本
    • lintOptions(示例中)见 问题
    • build.gradle 脚本(示例中)
    • settings.gradle(示例中)
  • jcenter退役

    由于jcenter将在2021年5月1日退役,因此需要替换它。请将 build.gradle 中的 jcenter() 替换为 mavenCentral()gradlePluginPortal()

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

示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';

import 'package:package_info/package_info.dart';
import 'package:appcenter_bundle/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](/user/override)
  _MyAppState createState() => _MyAppState();
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Container(
          padding: EdgeInsets.all(20),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              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');
                  }

                  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');
                  }

                  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');
                  }

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

class PackageInfoContent extends StatelessWidget {
  const PackageInfoContent();

  [@override](/user/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('应用名称:\n${packageInfo.appName}'),
              const SizedBox(height: 8.0),
              Text('包名:\n${packageInfo.packageName}'),
              const SizedBox(height: 8.0),
              Text('版本号:\n${packageInfo.version}'),
              const SizedBox(height: 8.0),
              Text('构建号:\n${packageInfo.buildNumber}'),
            ],
          );
        }

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

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

1 回复

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


在Flutter应用中集成appcenter_bundle插件,可以帮助你将应用与Microsoft App Center集成,以便进行崩溃报告、分析、推送通知等功能。以下是一个基本的代码案例,展示了如何在Flutter项目中集成和使用appcenter_bundle插件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  appcenter: ^x.y.z  # 请替换为最新的版本号
  appcenter_analytics: ^x.y.z  # 如果需要分析功能
  appcenter_crashes: ^x.y.z  # 如果需要崩溃报告功能

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

2. 配置App Center

android/app/src/main/AndroidManifest.xmlios/Runner/Info.plist文件中添加App Center的配置。

对于Android:

<application
    ...>
    <meta-data
        android:name="com.microsoft.appcenter.secret"
        android:value="YOUR_ANDROID_APP_SECRET" />
</application>

对于iOS:

<key>AppCenter</key>
<dict>
    <key>Secrets</key>
    <dict>
        <key>YOUR_IOS_APP_SECRET</key>
        <string>Your_iOS_App_Secret_Here</string>
    </dict>
</dict>

请将YOUR_ANDROID_APP_SECRETYOUR_IOS_APP_SECRET替换为你从App Center获取的密钥。

3. 初始化App Center

在你的Flutter应用的主文件中(通常是lib/main.dart),初始化App Center:

import 'package:flutter/material.dart';
import 'package:appcenter/appcenter.dart';
import 'package:appcenter_analytics/appcenter_analytics.dart';
import 'package:appcenter_crashes/appcenter_crashes.dart';

void main() {
  // 初始化App Center
  AppCenter.start(
    "YOUR_APP_SECRET", // 对于Android和iOS使用相同的密钥,或者根据平台条件选择不同的密钥
    [
      Analytics.className(),
      Crashes.className(),
    ]
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('App Center Integration'),
        ),
        body: Center(
          child: Text('Check the console for App Center logs.'),
        ),
      ),
    );
  }
}

4. 使用分析功能

如果你集成了分析功能,你可以这样使用:

import 'package:appcenter_analytics/appcenter_analytics.dart';

// 在应用的某个地方发送自定义事件
Analytics.trackEvent("CustomEvent", {"CustomProperty": "CustomValue"});

5. 使用崩溃报告功能

如果你集成了崩溃报告功能,你可以故意触发一个崩溃来测试:

import 'package:appcenter_crashes/appcenter_crashes.dart';

// 在应用的某个地方故意触发崩溃
try {
  throw new Exception("This is a test crash.");
} catch (e) {
  Crashes.handleError(e);
}

请注意,在实际应用中,你应该避免在生产代码中故意触发崩溃。

总结

以上是一个基本的Flutter应用集成appcenter_bundle插件的代码案例。你可以根据需要进一步配置和使用App Center的其他功能,如推送通知等。请确保遵循App Center的官方文档以获取最新的配置和使用指南。

回到顶部