SwiftUI - 与 Microsoft 的 Firebase 身份验证

Posted

技术标签:

【中文标题】SwiftUI - 与 Microsoft 的 Firebase 身份验证【英文标题】:SwiftUI - Firebase Authentication with Microsoft 【发布时间】:2019-11-21 05:41:04 【问题描述】:

目前我正在尝试使用 SwiftUI 构建应用程序并使用 Firebase 身份验证与 Microsoft。我想要做的是通过微软帐户登录并通过令牌获取一些信息。过去,我是通过这种方式成功完成的:Link,但在 SwiftUI 中却失败了。

以下是我实现的方式,该应用确实打开了 Microsoft 登录页面,并且似乎登录成功,但它在空白页面处停止,并且没有显示原始视图。

import SwiftUI
import Firebase

struct SignInView: View 

    var microsoftProvider : OAuthProvider?

    init()
        self.microsoftProvider = OAuthProvider(providerID: "microsoft.com")
    

    func signIn () 

        self.microsoftProvider?.getCredentialWith(_: nil)credential, error in

            if error != nil 
                // Handle error.
            

            if let credential = credential 

                Auth.auth().signIn(with: credential)  (authResult, error) in

                    if error != nil 
                        // Handle error.
                    

                    guard let authResult = authResult else 
                        print("Couldn't get graph authResult")
                        return
                    

                    print(authResult.user)

                    // get credential and token when login successfully
                    let microCredential = authResult.credential as! OAuthCredential
                    let token = microCredential.accessToken!

                    // use token to call Microsoft Graph API
                    // ...
                
            
        
    

    var body: some View 
        VStack 
             Button(action: signIn) 
                Text("SignIn")
            
        
    


struct SignInView_Previews: PreviewProvider 
    static var previews: some View 
        SignInView()
    


【问题讨论】:

【参考方案1】:

与 Firebase 支持团队协商后,问题已解决。

团队非常周到且乐于助人。我们完成了所有设置确认并缩小了一些范围。最后附上团队的解决方案:Phone Number Authentication

除了官方文档中描述的所有步骤外,还需要确保已经安装了Firebase 6.13.0Auth SDK v6.4.0

然后,在 SceneDelegate.swift 中实现下面的函数,就可以在 Authentication 流程中处理重定向 URL。登录流程成功完成,可以收到令牌。

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) 
  for urlContext in URLContexts 
      let url = urlContext.url
      Auth.auth().canHandle(url)
  

【讨论】:

以上是关于SwiftUI - 与 Microsoft 的 Firebase 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中子结构的计算属性未更新

在 SwiftUI 中删除整个列表

[SwiftUI]:ForEach 不适用于字典数组、带数组的字典

SwiftUI 视图,如 UIKit UIView,如何更改图像的大小

SwiftUI 背景图片全屏

F#周报2019年第8期