AndroidManifest.xml、AppDelegate.swiftからenvにアクセス
Flutter Advent Calendar3 2021 18日目の記事です。
こんにちは、@taitai9847です。
今月頭に参加したハッカソンで、Google Map APIを使用する機会があり、ググった時にこれだ!という記事がなかったため今回このタイトルで執筆します。(記事サーチ不足だったらすみません)
今回、使用したplugin
今回、用いたpluginはflutter_configになります。
flutter_configとは
Plugin that exposes environment variables to your Dart code in Flutter as well as to your native code in iOS and Android.
Inspired by react-native-config
(pub.devからの抜粋)
(意訳)環境変数をFlutterのDartコードだけではなく、iOSやAndroidのネイティブにも公開するプラグインである
環境変数を扱うpluginだと、自分は真っ先にflutter_dotenvを思いつくのですが、native側で簡単に呼び出すことは現状できなそうです。そのため、選択肢のうちの一つとして、flutter_configが挙がってくることになりそうです。
注意): このモジュールは、パッケージングのために機密情報を難読化したり暗号化したりしないので、機密鍵を .env に保存しないように注意してください
基本的な使い方
Readmeからの抜粋になります。
exampleになるので各々で自信の場合に置き換えてください。
1.Flutterアプリケーションのルート位置に新しく.envを作成
API_KEY=okazunogohann ///example
2.main.dartで全ての環境変数を読み込む
import 'package:flutter_config/flutter_config.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // Required by FlutterConfig
await FlutterConfig.loadEnvVariables();
runApp(MyApp());
}
これでアプリのいかなるところからでも環境変数を呼ぶことができます。
3.アプリでの呼び出し
3.1 Flutterアプリ内
import 'package:flutter_config/flutter_config.dart';
FlutterConfig.get('API_KEY') // returns 'okazunogohann'
3.2 iOS側での呼び出し
参考例としてGoogleMapAPI
import UIKit
import Flutter
import flutter_config //import忘れずに
import GoogleMaps
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GMSServices.provideAPIKey(FlutterConfigPlugin.env(for: "API_KEY")) //API_KEY 呼び出し
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
3.3 Android側での呼び出し
3.3.1 pluginの適用
android/app/build.gradle
でpluginを適用してあげる
~~省略~~
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply from: project(':flutter_config').projectDir.getPath() + "/dotenv.gradle" // 追加ライン
~~省略~~
3.3.2 呼び出し
今回、自分はGoogleMapAPIを用いたので、それを参考例として挙げたいと思います。
~~省略~~
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="@string/API_KEY"/> // 追加ライン
<meta-data android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"/>
~~省略~~
最後に
ここまで読んでいただきありがとうございます。
以上が環境変数の呼び出しについてでした。個人的に、plugin周りをしっかり読む機会も少なかったため、とても良い経験になりました。
Discussion