Я хотел бы применить модуль входа в Facebook, нажав на пользовательскую кнопку и получить токен доступа от Facebook, а затем передать токен доступа из Facebook, чтобы перейти на страницу входа в систему.
Когда приходит выполнение, ответа от обратного вызова регистра нет.
Я настроил приложение для разработчиков Facebook под названием: JacksonApplication и приложение, написанное на Kotlin, как показано ниже:
Не могли бы вы сказать, какие еще способы я должен реализовать?
class JacksonApplication : Application() {
override fun onCreate() {
super.onCreate()
AppEventsLogger.activateApp(this);
JodaTimeAndroid.init(this);
}
}
Моя функция:
callbackManager = CallbackManager.Factory.create()
LoginManager.getInstance()
LoginManager.getInstance().registerCallback(callbackManager ,
object : FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
println("facebook loginResult : $loginResult")
handleFacebookAccessToken(loginResult.accessToken);
// App code
}
override fun onCancel() {
// App code
}
override fun onError(exception: FacebookException) {
println("loginResult : ${exception.localizedMessage}")
// App code
}
})
fun handleFacebookAccessToken( token : AccessToken) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
val credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth!!.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success
val firebaseUser = mAuth!!.currentUser
updateUI(firebaseUser)
} else {
// Sign in fails
val currentUser = mAuth!!.currentUser!!
user.register(currentUser.uid)
}
}
}
Мои действия:
private fun loginSocial( type : String ) {
if (type == "Facebook") {
println("execute social reg by facebook")
callbackManager = CallbackManager.Factory.create()
LoginManager.getInstance()
LoginManager.getInstance().registerCallback(callbackManager ,
object : FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
println("facebook loginResult : $loginResult")
handleFacebookAccessToken(loginResult.accessToken);
// App code
}
override fun onCancel() {
// App code
}
override fun onError(exception: FacebookException) {
println("loginResult : ${exception.localizedMessage}")
// App code
}
})
}else if(type == "Google") {
println("execute social reg by google")
val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
startActivityForResult(intent, REQUEST_CODE_GOOGLE_SIGN_IN)
mGoogleApiClient!!.connect()
}
}
onActivity Результат:
override fun onActivityResult(requestCode: Int , resultCode: Int , data: Intent?) {
super.onActivityResult(requestCode , resultCode , data)
callbackManager?.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
progressDialog = ProgressDialog(this )
progressDialog!!.setMessage(this.resources.getString(R.string.loading))
progressDialog!!.setCancelable(false)
progressDialog!!.show()
val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result.isSuccess) {
// successful -> authenticate with Firebase
val account = result.signInAccount
firebaseAuthWithGoogle(account!!)
} else {
// failed -> update UI
updateUI(null)
Toast.makeText(applicationContext, "SignIn: failed!",
Toast.LENGTH_SHORT).show()
}
}else {
progressDialog = ProgressDialog(this )
progressDialog!!.setMessage(this.resources.getString(R.string.loading))
progressDialog!!.setCancelable(false)
progressDialog!!.show()
}
}