ios - 如何避免将 REVERSED_CLIENT_ID 硬编码到 iOS Info.plist 中以进行开发/生产 Google 登录?

标签 ios firebase flutter firebase-authentication google-signin

我正在使用 Firebase 开发 Flutter 移动应用。

我需要单独的 Firebase 环境用于开发和生产。

我关注这个guide进行设置。

问题是当我为 iOS 实现谷歌身份验证时,因为在 Runner must copy REVERSED_CLIENT_ID from GoogleServices-Info.plist into Info.plist file 中.

我不能将这个 REVERSED_CLIENT_ID 硬编码到 Info.plist 中,因为它对于我的开发和生产环境是不同的。

有没有办法在 Info.plist 中指定变量以获得不同环境的正确 REVERSED_CLIENT_ID

我正在使用此脚本复制正确的 GoogleServices-Info.plist:

if [ "${CONFIGURATION}" == "Debug-prod" ] || [ "${CONFIGURATION}" == "Release-prod" ] || [ "${CONFIGURATION}" == "Release" ]; then
cp -r "${PROJECT_DIR}/Runner/Firebase/Prod/GoogleService-Info.plist" "${PROJECT_DIR}/Runner/GoogleService-Info.plist"

echo "Production plist copied"

elif [ "${CONFIGURATION}" == "Debug-dev" ] || [ "${CONFIGURATION}" == "Release-dev" ] || [ "${CONFIGURATION}" == "Debug" ]; then

cp -r "${PROJECT_DIR}/Runner/Firebase/Dev/GoogleService-Info.plist" "${PROJECT_DIR}/Runner/GoogleService-Info.plist"

echo "Development plist copied"
fi

我到处寻找答案,但找不到!因此,我完全被阻止了。

谢谢!

最佳答案

我能够通过创建一个特定于环境的用户定义变量并将该变量拉入 Info.plist 来解决这个问题

我使用本文中的说明设置我的应用程序以连接到两个 firebase 项目(开发和生产): https://medium.com/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b

千英尺总结是,您最终会为每个开发人员和产品创建一个 GoogleServices-Info.plist 文件,该文件在构建时被复制到正确的位置。

设置两个 REVERSE_CLIENT_IDS:

  1. 通过将用户定义的变量添加到 ios/Flutter/Debug.xcconfig 和 ios/Flutter/Release.xcconfig 来创建它。我调用了我的:GOOGLE_SERVICE_REVERSE_CLIENT_ID = {在 GoogleService-Info.plist 文件中找到的 REVERSE_CLIENT_ID}
  2. 将 Info.plist 中设置的硬编码 REVERSE_CLIENT_ID 替换为 $(GOOGLE_SERVICE_REVERSE_CLIENT_ID)
  3. 在 XCode 中打开您的项目并转到用户定义部分并为每个构建类型设置实际环境特定的 REVERSE_CLIENT_ID。目标 > 运行者 > build设置 > 搜索“用户” > 用户定义 > GOOGLE_SERVICES_REVERSE_CLIENT_ID >

    Debug-dev = com.googleusercontent.apps.{dev client-id}
    Debug-prod = com.googleusercontent.apps.{prod client-id}
    Profile-dev = com.googleusercontent.apps.{dev client-id}
    Profile-prod = com.googleusercontent.apps.{prod client-id}
    Release-dev = com.googleusercontent.apps.{dev client-id}
    Release-prod = com.googleusercontent.apps.{prod client-id}

关于ios - 如何避免将 REVERSED_CLIENT_ID 硬编码到 iOS Info.plist 中以进行开发/生产 Google 登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54493380/

相关文章:

angular - RxJS - 如果输入可观察对象为空数组,则 switchMap 不会发出值

flutter - 如何在 Flutter 上使用 OpenStreetMaps

firebase - Flutter:Firebase Realtime 从对象列表中删除对象

ios - 给定名称不显示为应用程序名称,安装应用程序时,项目名称显示为应用程序名称,在 iOS、Apple、AppStore

android - 程序类型已经存在 : android. support.v4.os.ResultReceiver$MyResultReceiver on Ionic

ios - 如何修复 Swift 5.0 中的 “Cannot invoke initializer for type ' MKMapRect' with an argument list of type '(MKMapRect)' '” 错误

android - 无法使用过滤器从 firebase 获取数据

ListView 不在定位的小部件中滚动

ios - 使用 Frank 测试基于位置的 iOS 应用程序

objective-c - 如何连接到基类中的 IBOutlet 和 IBAction