Facebook android sdk LoginButton заставляет зайти на сайт дважды - PullRequest
0 голосов
/ 16 декабря 2018

Я использую Facebook android-логин sdk.И когда я пытаюсь войти без встроенного приложения Facebook на устройстве, используя встроенную веб-форму), Facebook пытается войти дважды.Я обнаружил , что проблема в кнопке Facebook Login.Итак, я хочу знать, есть ли какой-то способ сохранить FacebookLoginButton (вместо обычной кнопки) и не регистрироваться дважды, если у пользователя нет собственного приложения Facebook

Код MyFacebookActivity

class MyFacebookActivity : AppCompatActivity() {

private var callbackManager: CallbackManager? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_my_facebook)
    AppEventsLogger.activateApp(this)

    // This button is from facebook sdk (com.facebook.login.widget.LoginButton)
    facebookSignInButton.setOnClickListener{
        callbackManager = CallbackManager.Factory.create()
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "default"))
        LoginManager.getInstance().registerCallback(callbackManager,
            object : FacebookCallback<LoginResult> {
                override fun onSuccess(result: LoginResult) {
                    Log.d("TAG", "Facebook token ${result.toString}")

                    val request = GraphRequest.newMeRequest(
                        result.accessToken
                    ) { `object`, response ->
                        Log.d("TAG", response.jsonObject.toString())
                    }

                    val parameters = Bundle()
                    parameters.putString("fields", "id,name")
                    request.parameters = parameters
                    request.executeAsync()
                }

                override fun onCancel() {
                    Log.d("FacebookTag", "Facebook onCancel")
                }

                override fun onError(error: FacebookException?) {
                    Log.d("FacebookTag", "Facebook onError")
                }

            })
    }

    facebookLogOutButton.setOnClickListener {
        LoginManager.getInstance().logOut()
    }
}

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

    callbackManager?.onActivityResult(requestCode, resultCode, data)
}

}

1 Ответ

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

Решение было очень простым.Вам не нужен onClickListener для Facebook LoginButton.Он просто имеет все методы LoginManager.Итак, правильный код:

callbackManager = CallbackManager.Factory.create()
    facebookSignInButton.setReadPermissions("public_profile")
    facebookSignInButton.registerCallback(callbackManager,
        object : FacebookCallback<LoginResult> {
            override fun onSuccess(result: LoginResult) {
                // stuff

                val request = GraphRequest.newMeRequest(
                    result.accessToken
                ) { `object`, response ->
                    // stuff
                }

                val parameters = Bundle()
                parameters.putString("fields", "id,name")
                request.parameters = parameters
                request.executeAsync()
            }

            override fun onCancel() {
                Log.d("FacebookTag", "Facebook onCancel")
            }

            override fun onError(error: FacebookException?) {
                Log.d("FacebookTag", "Facebook onError")
            }

        })
...