Flutter iOS端Google与Facebook登录共存的info.plist配置问题
解决Flutter iOS端Google与Facebook登录无法共存的问题
你的问题根源是info.plist中重复定义了CFBundleURLTypes键——iOS的Property List采用字典结构,重复的键会被最后一次定义覆盖,导致其中一个登录的URL Scheme被丢弃,进而失效。
修正步骤
1. 合并CFBundleURLTypes配置
把Google和Facebook的URL Scheme合并到同一个CFBundleURLTypes数组中,每个平台的Scheme对应一个独立的<dict>节点:
<key>CFBundleURLTypes</key> <array> <!-- Google Sign-in Scheme --> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <!-- 替换为你的Google REVERSED_CLIENT_ID --> <string>*********</string> </array> </dict> <!-- Facebook Sign-in Scheme --> <dict> <key>CFBundleURLSchemes</key> <array> <!-- 替换为你的Facebook App ID前缀的Scheme --> <string>fb*******</string> </array> </dict> </array>
2. 补充LSApplicationQueriesSchemes
为Facebook登录添加必要的查询Scheme,确保App能检测到Facebook客户端:
<key>LSApplicationQueriesSchemes</key> <array> <string>sms</string> <string>tel</string> <!-- Facebook 必要Scheme --> <string>fbapi</string> <string>fb-messenger-share-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array>
3. 确保Google登录配置完整
确认你已将GoogleService-Info.plist文件添加到iOS项目的Runner目录中,或者手动添加GIDClientID键:
<key>GIDClientID</key> <string>你的Google Client ID</string>
4. 清理项目缓存
- 在Xcode中执行
Product > Clean Build Folder - 执行
pod install更新依赖 - 重启Xcode后重新运行项目
修正后的完整info.plist核心片段
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <!-- 原有其他配置保持不变 --> <key>LSApplicationQueriesSchemes</key> <array> <string>sms</string> <string>tel</string> <string>fbapi</string> <string>fb-messenger-share-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array> <!-- 合并后的URL Types配置 --> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>*********</string> <!-- Google REVERSED_CLIENT_ID --> </array> </dict> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb*******</string> <!-- Facebook Scheme --> </array> </dict> </array> <!-- Facebook 其他配置 --> <key>FacebookAppID</key> <string>*******</string> <key>FacebookClientToken</key> <string>********</string> <key>FacebookDisplayName</key> <string>********</string> <!-- Google 可选手动配置(如果未导入GoogleService-Info.plist) --> <key>GIDClientID</key> <string>你的Google Client ID</string> <!-- 原有其他配置保持不变 --> </dict> </plist>
内容的提问来源于stack exchange,提问作者Kafiul Islam
相关产品推荐
相关产品推荐

