【Flutter】Firebase Remote config で海外からのアプリ利用を禁止する。

Android

サービス内容や利用規約の関係で海外ユーザーにアプリを使わせたくないときのためのTIPS

Flutter アプリに Firebase と Firebase remote config は導入されている前提です。

Flutter アプリに Firebase を追加する
firebase_remote_config | Flutter Package
Flutter plugin for Firebase Remote Config. Update your application look and feel and behaviour without re-releasing.

Firebase Remote Configの設定

Firebase のweb コンソールから適当にパラメーターを追加

国/地域を条件に適応し、日本を選択

デフォルト値をfalse、日本の場合はtrueを設定しておきます。

これで日本から fetch したときのみ、true が返ってきます。

Flutter 側の実装

void countryCheck(BuildContext context) async {
  final remoteConfig = await RemoteConfig.instance;
  await remoteConfig.fetch(expiration: const Duration());
  await remoteConfig.activateFetched();
  final japanesechack = remoteConfig.getBool('japanCheck');

  if (japanesechack == false) {
    await _notJapanDialog(context);
  }
}

Future _notJapanDialog(BuildContext context) async {
  return showDialog(
    context: context,
    builder: (context) => WillPopScope(
      onWillPop: () async => false,
      child: SimpleDialog(
        children: [
          Container(
            child: Column(
              children: const [
                Text('日本からアクセスしてください。'),
                Text('The app is only available in Japan,')
              ],
            ),
          )
        ],
      ),
    ),
  );
}

適当にダイアログを出しておきました。

WillPopScope(
onWillPop: () async => false,)

でラップすることで Android のバックキーやダイアログの外をタップでダイアログを閉じることができないので起動時にダイアログを出しておけばとりあえず海外からアプリを起動された場合アプリが使えません。

ストアリリースしていないので Apple や Google のレビュワーがどうなるかわかりませんが、Apple のレビュワーが送ってくるスクショを見るかぎり、なんかVPN挟んでいるのでたぶん大丈夫だと思います。

リジェクトが心配ならレビュー中のみデフォルト値も true にしておけばおk

コメント

タイトルとURLをコピーしました