在 SwiftUI 中实现 Firebase 身份验证时,Xcode 13 找不到 FacebookAppID [重复]

Posted

技术标签:

【中文标题】在 SwiftUI 中实现 Firebase 身份验证时,Xcode 13 找不到 FacebookAppID [重复]【英文标题】:Xcode 13 cannot find FacebookAppID when implementing Firebase auth in SwiftUI [duplicate] 【发布时间】:2021-10-30 23:50:53 【问题描述】:

Xcode 13 的一个主要变化是info.plist 不再可见。根据 Facebook 的文档,我需要在info.plist 中添加以下内容:

<key>CFBundleURLTypes</key>
<array>
  <dict>
  <key>CFBundleURLSchemes</key>
  <array>
    <string>fbAPP-ID</string>
  </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>APP-ID</string>
<key>FacebookClientToken</key>
<string>CLIENT-TOKEN</string>
<key>FacebookDisplayName</key>
<string>APP-NAME</string>

我尝试在项目的Targets -&gt; Info 设置下手动添加这些。

但是,每当我单击应用程序上的登录按钮时,都会出现运行时错误提示

Thread 1: "App ID not found. Add a string value with your app ID for the key FacebookAppID to the Info.plist or call [FBSDKSettings setAppID:]."

其他一切似乎都正常(我可以在我的屏幕上看到 Facebook 默认按钮)。

我的 Facebook 登录视图

import SwiftUI
import FacebookLogin

struct CoverView: View 
    @AppStorage("isLoggedIn") var isLoggedIn = false
    @AppStorage("email") var email = ""
    
    var body: some View 
        FBLog(isLoggedIn: $isLoggedIn, email: $email)
            .frame(height: 50)
            .padding(.horizontal, 35)
            .clipShape(Capsule())
    


struct FBLog: UIViewRepresentable 
    
    func makeCoordinator() -> Coordinator 
        return FBLog.Coordinator(parent1: self)
    
    
    
    @Binding var isLoggedIn: Bool
    @Binding var email: String
    
    func makeUIView(context: Context) -> FBLoginButton 
        let button = FBLoginButton()
        button.delegate = context.coordinator
        return button
    
    
    func updateUIView(_ uiView: FBLoginButton, context: Context) 
        
    
    
    
    
    
    class Coordinator: NSObject, LoginButtonDelegate 
  

        var parent: FBLog
        
        init(parent1: FBLog) 
            parent = parent1
        

    
        
        func loginButton(_ loginButton: FBLoginButton, didCompleteWith result: LoginManagerLoginResult?, error: Error?) 
            if error != nil 
                print(error!.localizedDescription)
                return
            
            
            // check if user cancelled the flow.
            
            if !result!.isCancelled 
                parent.isLoggedIn = true
                let request = GraphRequest(graphpath: "me", parameters: ["fields": "email"])
                request.start()  [self] (_, res, _) in
                    
                    guard let profileData = res as? [String: Any] else return
                    
                    // save email
                    parent.email = profileData["email"] as! String
                    
                
            
        
        
        func loginButtonDidLogOut(_ loginButton: FBLoginButton) 
            // logging out
            parent.isLoggedIn = false
            parent.email = ""
        
              
    


问题

如何使用 Xcode 13 在 SwiftUI 中正确实现 Facebook 身份验证?

【问题讨论】:

【参考方案1】:

刚刚找到一个适合我的答案:https://***.com/a/67900140/4784433

在 Xcode 12.5 中测试

制作一个 AppDelegate.swift 并在下面添加此代码。

import SwiftUI import FacebookCore

class AppDelegate: NSObject, UIApplicationDelegate 
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool 
        ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
    
    
    func application(_ app: UIApplication,
                     open url: URL,
                     options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 
        return ApplicationDelegate.shared.application(app, open: url, options: options)
      

在你的@main App 文件中添加这一行

@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

【讨论】:

以上是关于在 SwiftUI 中实现 Firebase 身份验证时,Xcode 13 找不到 FacebookAppID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebase 身份验证中实现多用户帐户登录和切换?

如何在 MVVM-C RxSwift 中实现 firebase 身份验证

在firebase中实现电话和电子邮件身份验证的最佳方法是一次性使用?

可以在 Firebase 3 中实现自定义身份验证属性并将其与安全安全规则一起使用吗?

没有 AppDelegate 的 SwiftUI 远程推送通知(Firebase 云消息传递)

如何为 Flutter Web 添加 Firebase 预构建的身份验证 UI?