如何避免将反向的客户端ID硬编码到iOS Info.plist中以供开发人员/产品Google登录?

如何避免将反向的客户端ID硬编码到iOS Info.plist中以供开发人员/产品Google登录?,ios,firebase,flutter,firebase-authentication,google-signin,Ios,Firebase,Flutter,Firebase Authentication,Google Signin,我正在用Firebase开发Flitter移动应用程序 我需要单独的Firebase环境进行开发和生产 我将按照此进行设置 问题是当我为iOS实现google身份验证时,因为在Runner中 我不能将此反向的客户机ID硬编码到Info.plist中,因为它与我的开发和生产环境不同 是否有方法在Info.plist中指定变量,以便针对不同的环境获得正确的REVERSED\u CLIENT\u ID 我正在使用此脚本复制正确的谷歌服务信息.plist: if [ "${CONFIGURATION}"

我正在用Firebase开发Flitter移动应用程序

我需要单独的Firebase环境进行开发和生产

我将按照此进行设置

问题是当我为iOS实现google身份验证时,因为在Runner中

我不能将此
反向的客户机ID
硬编码到
Info.plist
中,因为它与我的开发和生产环境不同

是否有方法在
Info.plist
中指定变量,以便针对不同的环境获得正确的
REVERSED\u CLIENT\u ID

我正在使用此脚本复制正确的
谷歌服务信息.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
我到处寻找答案,但找不到!因为这个,我完全被封锁了


谢谢

我无法发表评论,但我能找到的最接近的答案是:(下面是一个为颤振修改的示例,请在遵循此示例之前检查您的路径!)

  • 在project中创建包含所有Google.plist文件(名称不同)的文件夹
  • 添加一个运行脚本
  • 生成方案名称(根据上述代码中${CONFIGURATION}的不同情况)
  • 此外,如果控制台弹出通知询问
    找不到配置文件:“GoogleService Info.plist”,则您可能必须在Runner文件夹中添加默认的
    GoogleService Info.plist
    ,尽管它已被上述链接中脚本的副本所取代。

  • 为了快速开发,您可以将dev和prod
    REVERSED\u CLIENT\u ID
    s添加到您的url方案中,并且您的应用程序将使用您在
    AppDelegate

    中初始化的应用程序。我的想法是,对于dev和prod环境,您拥有不同的GoogleService-Info.plist文件的方式,为开发和产品环境保留不同的Info.plist文件和正确的反向客户端ID。在脚本中包含一行代码,用于将Info.plist文件复制到iOS/Runner/目录中。

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

    我使用本文中的说明将应用程序设置为连接到两个firebase项目(dev和prod):

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

    要设置两个反向\u客户端\u ID:

  • 通过将用户定义的变量添加到ios/flatter/Debug.xcconfig和ios/flatter/Release.xcconfig,创建一个用户定义的变量。我调用了我的:GOOGLE_SERVICE_REVERSE_CLIENT_ID={REVERSE_CLIENT_ID在GoogleService-Info.plist文件中找到}
  • 将Info.plist中设置的硬编码反向客户端ID替换为$(谷歌服务反向客户端ID)
  • 在XCode中打开您的项目,转到用户定义部分,并为每个构建类型设置实际的特定于环境的REVERSE_CLIENT_ID。目标>运行者>构建设置>搜索“用户”>用户定义>谷歌服务\u反向\u客户端\u 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}


  • 有关于这个问题的更新吗?这不是一个真正的答案,而是另一篇文章的评论。请将此移到评论部分。
    PATH_TO_GOOGLE_PLISTS="${PROJECT_DIR}/Runner/Firebase"
        case "${CONFIGURATION}" in
    
       "Debug_Staging" | "AdHoc_Staging" )
            cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
    
       "Debug_Poduction" | "AdHoc_Poduction" | "Distribution" | "Test_Poduction" )
            cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-prod.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
    
        *)
            ;;
    esac