Flutter应用集成插件appcenter_bundle的使用
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