React Native构建时如何设置Google Auth反向客户端ID及动态配置Info.plist?
- 我的Info.plist配置如下,但无法传入在project.pbxproj中定义的
GOOGLE_REVERSE_CLIENT_ID,请问是否有办法在构建时向Info.plist动态传入字符串?
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>${GOOGLE_REVERSE_CLIENT_ID}</string> <string>twitterkit-xxxxxxxxxxxxxxx</string> <string>fb00000000000</string> </array> <key>CFBundleURLName</key> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> </dict> </array>
- 补充说明:同时添加以下两个反向客户端ID的方案似乎可行,请问这么做是否存在问题?
<array> <string>com.googleusercontent.apps.123-staging</string> <string>com.googleusercontent.apps.456-production</string> </array>
一、构建时动态向Info.plist传入字符串的方法
1. 使用Xcode用户自定义构建设置
打开Xcode项目的构建设置,点击左上角的+号选择「Add User-Defined Setting」,命名为GOOGLE_REVERSE_CLIENT_ID,并为Debug、Release等不同配置设置对应的值。之后将Info.plist中的${GOOGLE_REVERSE_CLIENT_ID}替换为$(GOOGLE_REVERSE_CLIENT_ID)——Xcode的变量引用语法是$()而非${},修改后构建时会自动替换为对应构建设置的值。
2. 添加Run Script脚本替换
在项目的Build Phases中新增一个Run Script阶段(放在「Copy Bundle Resources」之前),执行以下脚本:
PLIST_PATH="${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}" sed -i '' "s/\${GOOGLE_REVERSE_CLIENT_ID}/$GOOGLE_REVERSE_CLIENT_ID/g" "$PLIST_PATH"
注意:确保GOOGLE_REVERSE_CLIENT_ID已在构建设置中定义,脚本才能读取到该环境变量。
3. 使用xcconfig配置文件管理
创建不同环境的xcconfig文件(如Debug.xcconfig、Release.xcconfig),在文件中定义:
GOOGLE_REVERSE_CLIENT_ID = com.googleusercontent.apps.xxx-staging
然后在项目构建设置中为不同配置指定对应的xcconfig文件,Info.plist中同样用$(GOOGLE_REVERSE_CLIENT_ID)引用即可。
二、同时添加多个反向客户端ID的可行性
完全没问题,不会产生冲突。Google登录SDK在处理回调时,会自动匹配当前代码中配置的客户端ID对应的反向URL Scheme,只要你在代码里为不同环境配置了正确的客户端ID,SDK就能准确识别对应的Scheme。
这种方式适合需要在同一个构建包中兼容多环境登录的场景,但如果你的项目是分环境打包(不同包对应不同环境),更推荐使用动态替换的方式,只保留当前环境的反向ID,避免冗余配置。
内容的提问来源于stack exchange,提问作者Hyetigran

