这是我在我的应用程序中登录 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?
你是对的,用于 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)))