Flutter应用内评论插件in_app_review的使用
Flutter应用内评论插件in_app_review的使用
描述
in_app_review
是一个Flutter插件,它允许在不关闭应用程序的情况下显示一个评论弹窗,用户可以在其中为您的应用留下评价。或者,您也可以通过深度链接打开商店列表。
该插件在Android上使用 In-App Review API,而在iOS/MacOS上则使用 SKStoreReviewController。
使用方法
requestReview()
以下代码触发了应用内的评论提示。此功能不应该频繁使用,因为底层API对这一特性实施严格的配额限制,以确保良好的用户体验。
import 'package:in_app_review/in_app_review.dart';
final InAppReview inAppReview = InAppReview.instance;
if (await inAppReview.isAvailable()) {
inAppReview.requestReview();
}
建议:
- 在用户已经体验了您的应用足够长的时间后使用此功能,例如完成游戏关卡或几天之后。
- 尽量少用,否则不会弹出评论窗口。
避免:
- 不要通过按钮触发此功能,因为它只在底层API未超过配额时工作。(Android)
- 不要在用户正在进行任务中途打扰他们。
注意:在Android上测试
requestReview()
并不是简单的运行应用程序,而是需要遵循特定的测试步骤,请参阅测试部分获取更多信息。
openStoreListing()
以下代码将根据操作系统打开Google Play Store(Android)、App Store(iOS & MacOS)或Microsoft Store(Windows)。如果您想永久提供一个按钮或其他调用操作来让用户留下评论,则可以使用此方法,因为它不受配额限制。
import 'package:in_app_review/in_app_review.dart';
final InAppReview inAppReview = InAppReview.instance;
inAppReview.openStoreListing(appStoreId: '...', microsoftStoreId: '...');
appStoreId
仅在iOS和MacOS上需要,并且可以在App Store Connect的“General > App Information > Apple ID”中找到。microsoftStoreId
仅在Windows上需要。
指南
请参考以下官方指南:
由于存在显示次数的配额限制,您不应通过按钮或其他“调用行动”选项触发requestReview()
。相反,您可以可靠地通过openStoreListing()
重定向用户到您的商店列表。
测试(请仔细阅读)
Android
为了测试requestReview()
,您必须将应用程序上传到Play Store。推荐的方法是构建一个应用程序包并通过内部应用程序共享上传。
真实评论只能在生产轨道上使用requestReview()
创建。对于其他轨道和内部应用程序共享,提交按钮被禁用以强调这一点。
如果在此过程中遇到问题,许多开发人员也遇到了类似的困扰,请参考下面的故障排除表格或完整的官方说明。
故障排除表格
问题 | 解决方案 |
---|---|
应用尚未在Play Store发布。 | 应用不需要发布即可测试,但应用的applicationID必须至少在内部测试轨道中可用。 |
用户账户无法评论该应用。 | 应用必须出现在用户的Google Play库中。要将应用添加到用户的库中,请使用该用户账户从Play Store下载应用。 |
主账户不是在Play Store中选择的。 | 当设备上有多个账户时,确保主账户是在Play Store中选择的那个。 |
用户账户受保护(例如,企业账户)。 | 使用Gmail账户。 |
用户已经评论过该应用。 | 直接从Play Store删除评论。 |
已达到配额限制。 | 使用内部测试轨道或内部应用程序共享。 |
设备上的Google Play Store或Google Play Services存在问题。 | 这通常发生在Play Store被侧载到设备上时。使用具有有效版本的Play Store和Google Play Services的不同设备。 |
iOS
requestReview()
可以通过iOS模拟器或物理设备进行测试。请注意,当通过TestFlight测试时,requestReview()
将没有任何效果,如文档所述。
同样,真实评论只能在生产环境中使用requestReview()
创建。当本地测试时,提交按钮被禁用以强调这一点。
openStoreListing()
只能通过物理设备测试,因为iOS模拟器没有安装App Store。
MacOS
此插件可以通过本地运行您的MacOS应用程序进行测试。
跨平台兼容性
功能 | Android | iOS | MacOS | Windows |
---|---|---|---|---|
isAvailable() |
✅ | ✅ | ✅ | ❌ |
requestReview() |
✅ | ✅ | ✅ | ❌ |
openStoreListing() |
✅ | ✅ | ✅ | ✅ |
要求
Android
需要Android 5 Lollipop(API 21)或更高版本,且必须安装Google Play Store。
iOS
需要iOS 10.3或更高版本。
MacOS
需要MacOS 10.14或更高版本。
示例代码
以下是in_app_review
插件的完整示例代码:
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:in_app_review/in_app_review.dart';
void main() => runApp(const InAppReviewExampleApp());
enum Availability { loading, available, unavailable }
class InAppReviewExampleApp extends StatefulWidget {
const InAppReviewExampleApp({super.key});
@override
InAppReviewExampleAppState createState() => InAppReviewExampleAppState();
}
class InAppReviewExampleAppState extends State<InAppReviewExampleApp> {
final InAppReview _inAppReview = InAppReview.instance;
String _appStoreId = '';
String _microsoftStoreId = '';
Availability _availability = Availability.loading;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
try {
final isAvailable = await _inAppReview.isAvailable();
setState(() {
// This plugin cannot be tested on Android by installing your app
// locally. See https://github.com/britannio/in_app_review#testing for
// more information.
_availability = isAvailable && !Platform.isAndroid
? Availability.available
: Availability.unavailable;
});
} catch (_) {
setState(() => _availability = Availability.unavailable);
}
});
}
void _setAppStoreId(String id) => _appStoreId = id;
void _setMicrosoftStoreId(String id) => _microsoftStoreId = id;
Future<void> _requestReview() => _inAppReview.requestReview();
Future<void> _openStoreListing() => _inAppReview.openStoreListing(
appStoreId: _appStoreId,
microsoftStoreId: _microsoftStoreId,
);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'In App Review Example',
home: Scaffold(
appBar: AppBar(title: const Text('In App Review Example')),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('In App Review status: ${_availability.name}'),
TextField(
onChanged: _setAppStoreId,
decoration: const InputDecoration(hintText: 'App Store ID'),
),
TextField(
onChanged: _setMicrosoftStoreId,
decoration: const InputDecoration(hintText: 'Microsoft Store ID'),
),
ElevatedButton(
onPressed: _requestReview,
child: const Text('Request Review'),
),
ElevatedButton(
onPressed: _openStoreListing,
child: const Text('Open Store Listing'),
),
],
),
),
);
}
}
以上就是关于in_app_review
插件的详细介绍和使用方法。希望这些信息能帮助您更好地理解和使用这个强大的工具!如果有任何问题或改进建议,欢迎随时提出。
更多关于Flutter应用内评论插件in_app_review的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用内评论插件in_app_review的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用in_app_review
插件的详细代码示例。这个插件允许你在应用内请求用户进行评论或评分,从而提高应用的可见度和用户满意度。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加in_app_review
插件的依赖:
dependencies:
flutter:
sdk: flutter
in_app_review: ^3.0.0 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中(例如main.dart
),导入in_app_review
插件:
import 'package:in_app_review/in_app_review.dart';
3. 初始化插件并请求评论
你可以在应用中的适当位置(例如用户完成某个重要任务后)请求评论。以下是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:in_app_review/in_app_review.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('In-App Review Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _requestReview,
child: Text('Request In-App Review'),
),
),
),
);
}
Future<void> _requestReview() async {
final InAppReviewController controller = InAppReview.instance;
// Check if the platform is supported.
if (!controller.isAvailable) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('In-app reviews are not available on this platform.')),
);
return;
}
// Request in-app review.
InAppReviewResult result = await controller.requestReview();
// Handle the result.
if (result == InAppReviewResult.requested) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Review requested successfully.')),
);
} else if (result == InAppReviewResult.error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('An error occurred while requesting a review.')),
);
} else if (result == InAppReviewResult.notAvailable) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Review is not available at this time.')),
);
}
}
}
4. 处理用户反馈
请注意,in_app_review
插件不会直接提供用户是否提交评论或评分的反馈。你只能知道请求是否被成功发送。
5. 测试
在开发过程中,你可以使用Google Play Console的测试功能来模拟和测试应用内评论请求。确保你的应用已经发布到Alpha或Beta测试轨道,并且你已经添加了测试者。
注意事项
- 不要频繁请求用户进行评论,这可能会影响用户体验。
- 确保在请求评论之前,用户已经完成了某个重要任务或体验了应用的核心功能。
- 遵守Google Play和App Store的指南和政策,以避免滥用或不当使用应用内评论功能。
通过上述步骤,你应该能够在Flutter应用中成功集成并使用in_app_review
插件。