🔓

Flutterにて、既存ネイティブiOSからのセキュアデータ引き継ぎ方法

2022/02/14に公開

はじめに

iOSはKeyChainと呼ばれるものにセキュアデータを保存します。
そして、FlutterでもiOSのこのKeyChainを
↓flutter_secure_storage
https://pub.dev/packages/flutter_secure_storage

const secureStorage = FlutterSecureStorage();

を使うことでアクセスが可能です。ただ、そのまま使うと既存ネイティブiOSからFlutterへのリプレースの場面だと、既存データを引き継げない問題があります。

解決策

以下のオプションを使用することで、既存ネイティブiOSからFlutterへリプレースでも、セキュアデータを引き継ぐことが出来ます。

const secureStorage = FlutterSecureStorage(
  iOptions: IOSOptions(
    accountName: 'アプリのBundleIdentifier',
  ),
);

もし、既存ネイティブiOSにて
KeyChainのserviceにBundleIdentifierを指定していない場合は、その値を指定してあげれば問題ありません。

詳細

このaccountNameのデフォルトは以下の通りflutter_secure_storage_serviceという命名の指定になっています。

static const defaultAccountName = 'flutter_secure_storage_service';

https://github.com/mogol/flutter_secure_storage/blob/develop/flutter_secure_storage/lib/options/ios_options.dart#L37

なので、適切な値を渡してあげることで引き継いでくれるように↓このPRで対応してくれています。(ありがとう!Kristian!)
https://github.com/mogol/flutter_secure_storage/pull/184

Discussion