Facebook SDK - logInWithReadPermissions deprecated - Android

118 views Asked by At

This is my code for facebook login in my app.

    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)
    }

Here logInWithReadPermissions is deprecated, what is the alternative to this? And also onActivityResult method was deprecated, how can I use facebook login with ActivityResultLauncher?

1

There are 1 answers

0
Masum Billah On

You're right, both logInWithReadPermissions and onActivityResult methods for Facebook login are deprecated in the latest Facebook SDK for Android. Here's how you can update your code to use the alternatives:

Replacing logInWithReadPermissions:

  • Use LoginManager.getInstance().logInWithLoginRequest(this,loginRequest)instead.
  • Use You need to create a LoginRequest object with the desired permissions. For example, for email and public_profile:

Kotlin

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

Handling Login Results with ActivityResultLauncher:

  • Use registerForActivityResult to register a callback for the Facebook login activity.
  • Replace callbackManager.onActivityResult(requestCode, resultCode,data) with your callback:

Kotlin

 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)))