Firebase 在 Swift / iOS 中没有显示 microsoft.com 的标志页面



我正在使用OAuthProvider类使用个人Microsoft帐户登录来实现Firebase身份验证。

我遵循了以下说明:https://firebase.google.com/docs/auth/ios/microsoft-oauth?authuser=0

但是,当我使用Firebase SDK的OAuthProvider时,它不会显示Microsoft的登录页面,实际上getCredentialWith不会调用任何内容。

当我使用GoogleAuthProvider时,一切正常,Firebase SDK显示Google的登录页面。

let provider = OAuthProvider(providerID: "microsoft.com")
provider.scopes = ["files.readwrite.appfolder", "user.read"]
provider.getCredentialWith(nil, completion: { credential, error in
  if let error = error {
    os_log("Firebase Error: %@", type: .fault, error as CVarArg)
    return
  }
  if (credential != nil) {
    Auth.auth().signInAndRetrieveData(with: credential!, completion: { authResult, error in
      if let error = error {
        os_log("Firebase Error: %@", type: .fault, error as CVarArg)
        return
      }
    })
  }
})

在全局范围内声明,如下所示

var provider: OAuthProvider?
var authMicrosoft: Auth?

@IBAction func buttonTapped(_ sender: Any) {

     provider = OAuthProvider(providerID: "microsoft.com")

    provider?.customParameters = [
        "prompt": "consent",
                "login_hint": "",
    ]
    provider?.scopes = ["mail.read", "calendars.read"]


    provider?.getCredentialWith(nil ) { credential, error in
        if error != nil {
            // Handle error.
        }
        print(credential?.provider)

        if let x = credential {
            self. authMicrosoft?.signIn(with: x) { authResult, error in
                if error != nil {
                    // Handle error.
                }

                print(authResult?.additionalUserInfo?.profile)
                print(authResult?.user.providerID)

            }
        } else {
        }
    }
}

似乎您在本地定义了一个提供程序。当 getCredentialWith(_:completion( 调用异步执行时,您的本地函数可能已经完成执行,并且提供程序可能已被 ARC 解除分配。

为了解决您的问题,您可能需要专门将提供程序指针保留在某个位置---例如在视图控制器中作为属性或 ivar,这样就可以在初始化/解除分配视图控制器时创建/回收提供程序。

相关内容

最新更新