Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase未在Swift/iOS中显示microsoft.com的登录页_Ios_Swift_Firebase_Firebase Authentication - Fatal编程技术网

Firebase未在Swift/iOS中显示microsoft.com的登录页

Firebase未在Swift/iOS中显示microsoft.com的登录页,ios,swift,firebase,firebase-authentication,Ios,Swift,Firebase,Firebase Authentication,我通过使用OAuthProvider类使用个人microsoft帐户登录来实现Firebase身份验证 我遵循了以下指示: 但是,当我使用Firebase SDK的OAuthProvider时,它不会显示Microsoft的登录页面,实际上getCredentialWith不会调用任何内容 当我使用GoogleAuthProvider时,一切正常,Firebase SDK显示在Google的登录页面 let provider = OAuthProvider(providerID: "micros

我通过使用OAuthProvider类使用个人microsoft帐户登录来实现Firebase身份验证

我遵循了以下指示:

但是,当我使用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
      }
    })
  }
})

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


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

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

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 {

        }

    }

}