Flutter应用集成插件flutter_appcenter_bundle的使用
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 版本、compileSdkVersion
和com.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
更多关于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。
注意事项
- 确保App Secret和App ID正确:错误的App Secret或App ID会导致插件无法正常工作。
- 权限配置:在Android和iOS项目中,确保配置了必要的权限和设置,以便插件能够正常工作。
- 版本兼容性:检查
flutter_appcenter_bundle
插件的最新版本是否兼容你的Flutter SDK版本。
以上就是在Flutter应用中集成flutter_appcenter_bundle
插件的详细步骤和代码示例。希望这对你有所帮助!