I am trying to use facebook login in my app when the facebook app is installed i get onSuccess callback and works perfectly. When facebook app is not installed onCancelled is called and the method throws class not found exception even after clicking on continue.
Fragment code
binding.llSignInWithFacebook.setOnClickListener {
if (AppUtil.isNetworkAvailable(requireActivity())) {
val i = Intent(requireActivity(), LoginWithFacebook::class.java)
startActivityForResult(i, FACEBOOK_LOGIN_REQUEST_CODE)
// performFacebookLogin()
} else {
Toast.makeText(
requireActivity(),
resources.getString(R.string.no_internet_connection),
Toast.LENGTH_SHORT
).show()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == FACEBOOK_LOGIN_REQUEST_CODE) {
activity?.finish()
}
}
LoginWithFacebook
private lateinit var loginManager: LoginManager
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
loginManager = LoginManager.getInstance()
try {
sdkInitialize(applicationContext)
loginManager.logOut()
loginManager.logInWithReadPermissions(this, listOf("public_profile, email"))
setDefaultBehavior()
} catch (e: Exception) {
Toast.makeText(this, "Connection error, please try again", Toast.LENGTH_SHORT).show()
finish()
}
}
private fun setDefaultBehavior() {
callbackManager = create()
loginManager.registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
override fun onSuccess(result: LoginResult) {
try {
updateUI(result)
} catch (ignored: Exception) {
}
}
override fun onCancel() {
finish()
}
override fun onError(error: FacebookException) {
Log.d("MyTag", "Error: ${error.message} ", error)
Toast.makeText(this@LoginWithFacebook, resources.getString(R.string.connection_error), Toast.LENGTH_SHORT).show()
finish()
}
})
}