Пользовательская кнопка для входа в Facebook через Kotlin, но не удалась - PullRequest
0 голосов
/ 03 декабря 2018

Я хотел бы применить модуль входа в 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()


     }
}

1 Ответ

0 голосов
/ 03 декабря 2018

Добавьте эти строки в onActivityResult ()

 public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == YOUR_GOOGLE_REQUEST_CODE) {
        val task = GoogleSignIn.getSignedInAccountFromIntent(data)
        try {
            // Google Sign In was successful, authenticate with Firebase
            val account = task.getResult(ApiException::class.java)
            firebaseAuthWithGoogle(account!!)
        } catch (e: ApiException) {
            // Google Sign In failed, update UI appropriately
            Log.w(TAG, "Google sign in failed", e)
            // ...
        }
    } else {
        // Pass the activity result back to the Facebook SDK
        callbackManager.onActivityResult(requestCode, resultCode, data)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...