Facebook SDK - logInWithReadPermissions 已弃用 - Android

问题描述 投票:0回答:1

这是我在我的应用程序中登录 Facebook 的代码。

    private fun handleFacebookSignIn() {
        val loginManager = LoginManager.getInstance()
        loginManager.logInWithReadPermissions(this, listOf("email", "public_profile"))
        loginManager.registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
            override fun onSuccess(result: LoginResult) {
                println(result.accessToken)
                loginViewModel.facebookSignIn(result)
                toast(getString(R.string.sign_in_success))
                val intent = Intent(requireContext(), HomeActivity::class.java)
                startActivity(intent)
            }

            override fun onCancel() {
                // To Do
            }

            override fun onError(error: FacebookException) {
                // To Do
            }
        })
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        callbackManager.onActivityResult(requestCode, resultCode, data)
    }

这里 logInWithReadPermissions 已被弃用,有什么替代方案吗? 而且 onActivityResult 方法也已被弃用,我如何使用 ActivityResultLauncher 登录 facebook?

android kotlin facebook-login onactivityresult
1个回答
0
投票

你是对的,用于 Facebook 登录的 logInWithReadPermissions 和 onActivityResult 方法在最新的 Android Facebook SDK 中已被弃用。 以下是更新代码以使用替代方案的方法:

更换

logInWithReadPermissions:

  • 请使用
    LoginManager.getInstance().logInWithLoginRequest(this,loginRequest)
  • 使用您需要创建一个具有所需权限的
    LoginRequest
    对象。为了 例如,对于电子邮件和 public_profile:

科特林

val loginRequest = LoginRequest.Builder()
    .addReadPermissions("email", "public_profile").build()

使用

ActivityResultLauncher:

处理登录结果
  • 使用
    registerForActivityResult
    注册 Facebook 登录回调 活动。
  • callbackManager.onActivityResult(requestCode, resultCode,data)
    替换为 您的回电:

科特林

 private val facebookLoginLauncher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result ->
        if (result.resultCode == RESULT_OK) {
            val loginResult = LoginManager.getInstance().onActivityResult(result.data)
            if (loginResult != null) {
                // Handle login success like in onSuccess method above
            } else {
                // Handle login cancellation or error
            }
        } else {
            // Handle login failure
        }
    }

// In handleFacebookSignIn()
facebookLoginLauncher.launch(Intent(loginManager.createLoginIntent(loginRequest)))
© www.soinside.com 2019 - 2024. All rights reserved.