| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import 'dart:io';
- import 'package:logging/logging.dart';
- import 'package:url_launcher/url_launcher.dart';
- import '../persistence/persistence.dart';
- import '../remote_config/remote_config.dart';
- final Logger _log = Logger('RatingHelper');
- class RatingHelper {
- static const int _maxShowTimes = 3; //最多弹框次数
- static const int _showTimeHours = 24; // 24小时
- static const String _googlePlayUrl = "https://play.google.com/store/apps/details?id=jigsort.solitaire.jigsaw.match.games";
- static const String _appStoreUrl = "https://apps.apple.com/us/app/jigsort.solitaire.jigsaw.match.games/id6499138123";
- static String get appStoreUrl {
- if (Platform.isAndroid) {
- return _googlePlayUrl;
- }
- if (Platform.isIOS) {
- return _appStoreUrl;
- }
- return _googlePlayUrl;
- }
- static Future<bool> shouldShowRateDialog(int doneLevelCount) async {
- // 1. 是否已经评过分
- double rating = Persistence().rating;
- if (rating > 0) {
- _log.info("shouldShowRateDialog false. already rated, rating: $rating");
- return false;
- }
- // 2. 检查已经弹过几次框
- int rateShowTimes = Persistence().rateShowTimes;
- if (rateShowTimes >= _maxShowTimes) {
- _log.info("shouldShowRateDialog false. rateShowTimes limit");
- return false;
- }
- // ios 只弹框一次
- if (Platform.isIOS && rateShowTimes >= 1) {
- _log.info("shouldShowRateDialog false. iOS rateShowTimes limit");
- return false;
- }
- // 3. 检查上次弹框时间,需要超过24小时才能再次弹框
- DateTime now = DateTime.now();
- DateTime lastRateShowTime = Persistence().rateLastShowTime;
- if (now.difference(lastRateShowTime).inHours < _showTimeHours) {
- _log.info("shouldShowRateDialog false. show time in 24 hours");
- return false;
- }
- //4. 用户完成了n个关卡才弹框
- int rateLevelsCount = RemoteConfig().rateUsLevelCount;
- int completedCount = doneLevelCount;
- if (completedCount < rateLevelsCount) {
- _log.info("shouldShowRateDialog false. must finish at lease $rateLevelsCount works");
- return false;
- }
- _log.info("shouldShowRateDialog true!");
- return true;
- }
- // 用户点了取消按钮未评分
- static onRateCancel() async {
- // 写入弹框次数+1
- Persistence().rateShowTimes++;
- // 写入弹框时间
- Persistence().rateLastShowTime = DateTime.now();
- }
- // 用户选择评分并正常提交
- static onRateSubmmit(double rating) async {
- // 写入弹框次数+1
- Persistence().rateShowTimes++;
- // 写入弹框时间
- Persistence().rateLastShowTime = DateTime.now();
- // 写入评分
- Persistence().rating = rating;
- // 5星评分,跳转到应用商店评价页面
- if (rating >= 5.0 && Platform.isAndroid) {
- _linkLaunch(appStoreUrl);
- }
- }
- // 页面跳转
- static _linkLaunch(String link) async {
- Uri url = Uri.parse(link);
- if (!await launchUrl(url, mode: LaunchMode.externalApplication)) {
- throw Exception('Could not launch $url');
- }
- }
- }
|