Flutter AppCenter Bundle 更新至空安全插件flutter_appcenter_bundle_updated_to_null_safety的使用
Flutter AppCenter Bundle 更新至空安全插件flutter_appcenter_bundle_updated_to_null_safety
的使用
简介
此插件目前集成了AppCenter分析、崩溃报告和分发功能。
开始使用
要开始使用,请访问AppCenter并注册您的应用程序。
对于详细的AppCenter API参考,请访问AppCenter文档。
构建
AppCenter分发在发布到Google Play时存在一个问题。为了解决这个问题,您可以使用以下命令:
flutter build --flavor googlePlay
来构建Google Play版本,并使用:
flutter build --flavor appCenter
来构建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
}
}
如果您已经有风味设置并希望合并,请检查示例项目。请注意,风味维度是正交的。您可能只需要重用分发风味以获得最佳构建性能。有关详细信息,请参阅这篇文章。
在解决本地构建问题时,请先尝试运行示例项目。
使用
基本用法
import 'package:flutter_appcenter_bundle_updated_to_null_safety/flutter_appcenter_bundle_updated_to_null_safety.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', <String, String> {
'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找不到兼容的版本
手动删除 podfile.lock
并重新构建,这是在升级iOS原生依赖项时常见的问题。
Android构建问题
始终检查示例项目是否可以构建。如果不能,请报告问题。如果可以构建,请检查Gradle设置。
检查点包括:
- Gradle版本(在
gradle-wrapper.properties
中) - Kotlin版本(在
build.gradle
中) compileSdkVersion
(在build.gradle
中)com.android.tools.build:gradle
版本(在build.gradle
中)lintOptions
(在示例中)查看 issue
Execution failed for task ':app:lintVitalAppCenterRelease'
build.gradle
脚本(在示例中)settings.gradle
(在示例中)
jcenter退役
由于jcenter将于2021年5月1日退役,请替换为以下配置:
repositories {
google()
// jcenter()
mavenCentral()
gradlePluginPortal()
}
示例代码
以下是完整的示例代码,展示如何使用插件。
import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:flutter_appcenter_bundle_updated_to_null_safety/flutter_appcenter_bundle_updated_to_null_safety.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: $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](/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 更新至空安全插件flutter_appcenter_bundle_updated_to_null_safety的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter AppCenter Bundle 更新至空安全插件flutter_appcenter_bundle_updated_to_null_safety的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用已迁移到空安全(null safety)的 flutter_appcenter_bundle
插件的示例代码。这个插件通常用于集成 Microsoft App Center 到 Flutter 应用中,以便进行应用分发、崩溃报告和数据分析。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_appcenter_bundle
依赖,并且已经运行了 flutter pub get
。
dependencies:
flutter:
sdk: flutter
flutter_appcenter_bundle: ^最新版本号 # 请替换为实际的最新版本号
接下来,在你的 Flutter 应用中,你可以按照以下步骤进行配置和使用:
- 初始化 App Center:
在你的应用的入口文件(通常是 main.dart
)中,初始化 App Center。你需要在调用任何 App Center 服务之前完成这一步。
import 'package:flutter/material.dart';
import 'package:flutter_appcenter_bundle/flutter_appcenter_bundle.dart';
void main() {
// 初始化 App Center
AppCenter.configure(
appSecret: '你的AppSecret', // 请替换为你的实际AppSecret
services: [
Crashes.class,
Analytics.class,
// 如果需要其他服务,可以在这里添加,例如:Distribute.class
],
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter AppCenter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter AppCenter Demo'),
),
body: Center(
child: Text('Check console for App Center logs'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 模拟一个崩溃
Crashes.hasCrashedInLastSession().then((bool hasCrashed) {
if (!hasCrashed) {
throw Exception('This is a simulated crash');
}
});
},
tooltip: 'Crash',
child: Icon(Icons.bug_report),
),
);
}
}
- 使用 Analytics 服务:
你可以在应用的任何地方使用 Analytics 服务来记录自定义事件。
// 记录一个自定义事件
Analytics.trackEvent(
name: 'user_action',
properties: <String, dynamic>{
'action': 'button_clicked',
'button_name': 'example_button',
},
);
- 处理 Crashes:
在上面的示例中,我们已经在 FloatingActionButton 的 onPressed
方法中模拟了一个崩溃。在实际应用中,你可以根据需要记录和处理崩溃。
- 分发更新(可选):
如果你需要集成分发功能,可以使用 Distribute
服务。注意,这部分功能需要额外的配置,并且可能涉及到从 App Center 控制台上传新的应用版本。
// 检查是否有可用的更新
Distribute.checkForUpdate().then((bool updateAvailable) {
if (updateAvailable) {
// 提示用户更新应用
Distribute.releaseUpdate().then((bool updateInstalled) {
if (updateInstalled) {
// 更新已安装,可以提示用户重启应用
}
});
}
});
请确保你已经正确设置了 App Center 的相关配置,包括在 App Center 控制台中为你的应用添加了正确的密钥和服务。
这个示例展示了如何初始化 App Center、记录自定义事件、模拟崩溃以及检查应用更新。根据你的实际需求,你可以进一步扩展和自定义这些功能。