在 Flutter 中安全注入 Google Maps API 密钥(iOS 和 Android)

问题描述 投票:0回答:1

我目前正在尝试使用环境变量向我的 Flutter 应用程序中的 iOS 和 Android 添加 Google Maps API 密钥,而无需对其进行硬编码。

为此,我遵循了使用 shell 脚本 extract-defines.sh 的指南来解码 DART_DEFINES 并将变量输出到 .xcconfig 文件。我已将此脚本设置为 Xcode 中的预构建操作,但这不起作用。

我不知道如何调试它来检查脚本是否正常工作。

应该提取 dart 定义并将其添加到 xconfig 的 shell 脚本。

#!/bin/sh

OUTPUT_FILE="${SRCROOT}/Flutter/Dart-Defines.xcconfig"

: > $OUTPUT_FILE

function decode_url() { echo "${*}" | base64 --decode; }

IFS=',' read -r -a define_items <<<"$DART_DEFINES"

for index in "${!define_items[@]}"
do
    item=$(decode_url "${define_items[$index]}")
    # Dart definitions also include items that are automatically defined on the Flutter side. 
    # However, if we export those definitions, we will not be able to build due to errors, # so we do not output items that start with flutter or FLUTTER.
    lowercase_item=$(echo "$item" | tr '[:upper:]' '[:lower:]')
    if [[ $lowercase_item != flutter* ]]; then
        echo "$item" >> "$OUTPUT_FILE"
    fi
done

我将此密钥添加到 Info.plist

<key>GOOGLE_MAPS_API</key> <string>$(GOOGLE_MAPS_API)</string>

现在我正在尝试使用相同的键在 AppDelegate.swift 中配置 Google 地图

import Flutter
import UIKit
import GoogleMaps

@main
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    if let googleMapsApiKey = Bundle.main.object(forInfoDictionaryKey: "GOOGLE_MAPS_API") as? String {
        GMSServices.provideAPIKey(googleMapsApiKey)
    }
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

我主要遵循我在网上找到的唯一的指南。但我想我可能错过了一些东西。

注意:我也想在 Android 上这样做,但我从 IOS 开始,但遇到了困难

ios flutter xcode google-maps
1个回答
0
投票

最好的方法是什么?解决了吗

© www.soinside.com 2019 - 2024. All rights reserved.