flutter 升级程序错误 - PlayStoreSearchAPI.lookupById 返回 null

问题描述 投票:0回答:1

每次启动应用程序时,我都会收到此错误。 Crashlytics 错误,app_update_controller.dart。怎么解决?

Flutter(频道稳定,3.19.1,在 macOS 13.5.2 22G91 darwin-arm64 上,区域设置 ru-AE) Android 工具链 - 为 Android 设备开发(Android SDK 版本 34.0.0) Xcode - 为 iOS 和 macOS 开发 (Xcode 14.3.1) Chrome - 为网络开发 Android Studio(版本2023.1) VS 代码(版本 1.87.0) 连接的设备(3 个可用) 网络资源

这是AppUpdateController,app_update_controller.dart:

    class AppUpdateController extends GetxController {
      final _logger = Get.find<ILogger>();
      String installedVersion = '';
      String packageName = '';
      String appName = '';
      String storeVersion = '';
      String itunesStoreUrl = '';
      final PlayStoreSearchAPI _playStoreSearchAPI = PlayStoreSearchAPI();
      final ITunesSearchAPI _iTunesSearchAPI = ITunesSearchAPI();
      late final FirebaseRemoteConfig remoteConfig;
      static const Duration remindLaterDuration = Duration(days: 1);
    
      static AppUpdateController get find => Get.find();
    
      Future<void> init(FirebaseRemoteConfig remoteConfig) async {
        this.remoteConfig = remoteConfig;
        await _checkAppUpdate(true);
      }
    
      void getPackageInfo() => _getPackageInfo();
    
      Future<void> _getPackageInfo() async {
        _logger.verbose('Getting package info...');
        var packageInfo = await PackageInfo.fromPlatform();
        installedVersion = packageInfo.version;
        packageName = packageInfo.packageName;
        appName = packageInfo.appName;
      }
    
      Future<void> _checkAppUpdate(bool showAlert) async {
        await _getPackageInfo();
    
        if (Platform.isAndroid) {
          final response = await _playStoreSearchAPI.lookupById(
            packageName,
            country: Get.deviceLocale?.countryCode,
            language: Get.deviceLocale?.languageCode,
          );
          if (response == null) {
            _logger.error('Cant fetch android store version info');
            return;
          }
          final String? version = _playStoreSearchAPI.version(response);
          if (version == null) {
            _logger.error('Failed to parse android store version');
            return;
          }
          storeVersion = version;
        } else if (Platform.isIOS) {
          final response = await _iTunesSearchAPI.lookupByBundleId(packageName,
              country: Get.deviceLocale?.countryCode);
          if (response == null) {
            _logger.error('Cant fetch ios store version info');
            return;
          }
          final String? version = _iTunesSearchAPI.version(response);
          if (version == null) {
            _logger.error('Failed to parse ios store version');
            return;
          }
          storeVersion = version;
          itunesStoreUrl = _iTunesSearchAPI.trackViewUrl(response) ?? '';
        } else {
          _logger
              .info('Updater: Platform ${Platform.operatingSystem} not supported.');
          return;
        }
    
        final Version parsedCurrentVersion = Version.parse(installedVersion);
        final Version parsedStoreVersion = Version.parse(storeVersion);
    
        _logger.info(
            'Got version info from store. storeVersion: $parsedStoreVersion, currentVersion: $parsedCurrentVersion');
        if (parsedStoreVersion > parsedCurrentVersion) {
          _logger.info('Store version is newer. Requesting update...');
          final String minVersion =
              remoteConfig.getString(Defaults.remoteConfigMinVersionKey);
          final Version parsedMinVersion =
              minVersion.isEmpty ? Version(0, 0, 0) : Version.parse(minVersion);
          late final bool updateRequired;
          if (parsedMinVersion > parsedCurrentVersion) {
            updateRequired = true;
          } else {
            updateRequired = false;
          }
          final DateTime lastUpdateRequestedString =
              await _getLastUpdateRequestTime();
          final DateTime now = DateTime.now();
          if (!updateRequired &&
              now.difference(lastUpdateRequestedString).inSeconds <
                  remindLaterDuration.inSeconds) {
            _logger.info(
                'User suspended update by pressing "install later" button before');
            return;
          }
          RouteManagement.goToAppUpdateView();
        }
      }
    
      Future<DateTime> _getLastUpdateRequestTime() async {
        final String? lastUpdateRequestedString = await HiveService.get<String>(
            HiveBoxNames.lashUpdateRequested, Defaults.lastUpdateRequestedTimeKey);
        if (lastUpdateRequestedString == null) return DateTime(0);
        return DateTime.parse(lastUpdateRequestedString);
      }
    
      Future<void> _setLastUpdateRequestTime(DateTime date) {
        return HiveService.put(HiveBoxNames.lashUpdateRequested,
            Defaults.lastUpdateRequestedTimeKey, date.toIso8601String());
      }
    
      sendLaterLogs() {
        _logger.info('User pressed later update');
      }
    
      sendUpdateLogs() {
        _logger.info('User pressed update');
      }
    
      openStore() {
        if (Platform.isAndroid || Platform.isIOS) {
          final url = Uri.parse(
            Platform.isAndroid
                ? AppUrls.appPackageAndroidUrlFormat + packageName
                : itunesStoreUrl,
          );
          launchUrl(
            url,
            mode: LaunchMode.externalApplication,
          );
        }
      }
    }

flutter compiler-errors crashlytics
1个回答
0
投票

您的应用程序抛出错误消息“无法获取 Android 商店版本信息”。 从您的代码来看,当

_playStoreSearchAPI.lookupById
响应为
null
时,就会发生这种情况。 假设您正在使用“upgrader”包,如果我们检查此函数的源代码,我们可以看到当包的
id
为空或无法在 Play 商店中找到时,就会发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.