簡體   English   中英

如何在不推薦使用 onActivityResult 的情況下使用 Facebook 登錄 CallbackManager?

[英]How to use Facebook Sign in CallbackManager with onActivityResult deprecated?

我正在使用 Facebook 登錄選項創建應用程序。 到目前為止我做了所有事情,但是在 Facebook 應用程序之后的結果有問題。 我遵循了 Google 的文檔,但該文檔並未使用新棄用的 onActivityResult function 進行更新。 現在,我已經使用了從this獲取另一個活動結果的新方法。 但是,這不適用於 Facebook 登錄實現,因為不使用 registerForActivityResult 啟動器,但它使用自己的回調管理器。

有沒有人想出解決這個問題的方法? 也許我錯過了一些東西。

 callbackManager = CallbackManager.Factory.create()
    signInWithFacebook.setReadPermissions("email", "public_profile")

    signInWithFacebook.registerCallback(
        callbackManager,
        object : FacebookCallback<LoginResult> {
            override fun onSuccess(result: LoginResult) {
                handleFacebookAccessToken(result.accessToken)
            }

            override fun onCancel() {
     
            }

            override fun onError(error: FacebookException?) {
              
            }
        })




override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        callbackManager.onActivityResult(requestCode, resultCode, data)
    }


private fun handleFacebookAccessToken(token: AccessToken) {
    val credential = FacebookAuthProvider.getCredential(token.token)
    auth.signInWithCredential(credential)
        .addOnCompleteListener(OnCompleteListener {
            if (it.isSuccessful) {

            } else {
              
            }
        })
} 

使用這個( https://github.com/facebook/facebook-android-sdk/issues/875 )Github問題我找到了你的答案,這里是總結

首先,初始化回調管理器

val callbackManager: CallbackManager = CallbackManager.Factory.create()

然后使用登錄管理器注冊回調

 LoginManager.getInstance().registerCallback(callbackManager,
        object : FacebookCallback<LoginResult?> {
            override fun onSuccess(result: LoginResult?) {
                if (result?.accessToken != null) {
                    val accessToken = result.accessToken.token
        
                }
            }

            override fun onCancel() {
               
            }

            override fun onError(error: FacebookException) {
            }
        })

在您的自定義 Facebook 按鈕上,您必須 setOnClickListner

 binding.btnFacebook.setOnClickListener {
        LoginManager.getInstance().logInWithReadPermissions(
            this,
            loginViewModel.callbackManager,
            listOf("public_profile", "email")
        )
    }

我們必須為 onActivityResult 更改的內容已棄用

之前

binding.btnFacebook.setOnClickListener {
            LoginManager.getInstance().logInWithReadPermissions(
                this,
                listOf("public_profile", "email")
            )
        }

現在

 binding.btnFacebook.setOnClickListener {
            LoginManager.getInstance().logInWithReadPermissions(
                this,
                loginViewModel.callbackManager, //we added callback here according to new sdk 12.0.0 version of facebook
                listOf("public_profile", "email")
            )
    }

現在我用的是 Facebook SDK 版本

  //facebook login
    implementation 'com.facebook.android:facebook-login:12.0.0'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM