Как использовать Firebase Remote Config в AppDelegate.swift? - PullRequest
1 голос
/ 25 февраля 2020

Исходя из совета , я хотел бы управлять ключами API с помощью Firebase Remote Config , чтобы избежать жесткого кодирования ключей API, таких как google_maps_flutter . Он имеет AppDelegate.swift вроде:

import UIKit
import Flutter
import GoogleMaps

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GMSServices.provideAPIKey("YOUR KEY HERE")
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

Как можно изменить вышеприведенное, чтобы получить ключ API из Удаленная настройка Firebase и затем передать его GMSServices?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Я думал сделать это как комментарий, но решил сделать его своим ответом, так как он был слишком длинным.

Я думаю, что это один из способов получения ключей от remoteConfig, но снова может произойти сбой, когда Конфигурация извлечения не была получена. Один из способов решить эту проблему - заставить refre sh в случае сбоя, но опять же вы полагаетесь на firebase для этих ключей, и если по какой-то причине (испытал это до того, как firebase был приобретен google), он закрыл ваше приложение, затем будет непригодным для использования (как и для многих приложений).

Для меня я все же поставил свои ключи API в комплекте с приложением, чтобы убедиться, что все важные функции работают.

Другим вариантом будет связывание ваших ключей API, а затем вызов WebService для проверки новых ключей после истечения / изменения текущих ключей. Таким образом, у вас есть возможность немедленно истечь ваши ключи и заменить их на другие.

0 голосов
/ 25 февраля 2020

На основании этой статьи я придумал:

import UIKit
import Firebase
import Flutter
import GoogleMaps
//import os.log

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    FirebaseApp.configure()
    RemoteConfig.remoteConfig().fetchAndActivate() { status, error in
      let apiKey : String = RemoteConfig.remoteConfig()["Google_Maps_SDK_for_iOS_API_KEY"].stringValue ?? "MISSING";
      // os_log("Google_Maps_SDK_for_iOS_API_KEY = '%@'", apiKey)
      GMSServices.provideAPIKey(apiKey)
    }
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

Есть ли лучший способ?

...