FlutterでFireRemoteConfigを使ってバージョンアップを強制する
FlutterとRemoteConfigを使って、
アプリをあるバージョン"以上"にする方法を紹介します
(正確には アプリがあるバージョン未満の場合にアップデートを促す方法、です)
まずFlutter側のRemoteConfigの設定を済ませます
以下のようにRemoteConfigの設定もしてしまいます
使うパッケージ
アプリのバージョン取得用 pub.dev
x.x.xの形式のバージョン同士を比較する用 pub.dev
実装
Flutterで実装する場合、iOSとAndroidでバージョンは基本的には同じだと思いますが、
審査待ち等何らかの事情で足並みが揃わない場合のためにiOSとAndroidで処理を分けています
import 'dart:io'; import 'package:package_info/package_info.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:firebase_remote_config/firebase_remote_config.dart'; Future<bool> _shouldUpdate() async { final packageInfo = await PackageInfo.fromPlatform(); final appVersionStr = packageInfo.version; final appVersion = Version.parse(appVersionStr); // 現在のアプリのバージョン // remoteConfigの初期化 final RemoteConfig remoteConfig = await RemoteConfig.instance; // 何らかの事情でRemoteConfigから最新の値を取ってこれなかった場合のフォールバック final defaultValues = <String, dynamic>{ 'android_required_semver': appVersionStr, 'ios_required_semver': appVersionStr }; await remoteConfig.setDefaults(defaultValues); await remoteConfig.fetch(); // デフォルトで12時間キャッシュされる await remoteConfig.activateFetched(); final remoteConfigAppVersionKey = Platform.isIOS ? 'ios_required_semver' : 'android_required_semver'; // iOSとAndroid以外のデバイスが存在しない世界線での実装 final requiredVersion = Version.parse(remoteConfig.getString(remoteConfigAppVersionKey)); return appVersion.compareTo(requiredVersion).isNegative; }
あとは適所で
if (await _shouldUpdate()) { // アップデートを促すモーダルを出す等の処理 }
など書けばOKです
なおストアのページを開かせる際には
が便利