Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook android sdk登录按钮让用户两次进入该网站_Android_Kotlin_Facebook Sdk 4.0 - Fatal编程技术网

Facebook android sdk登录按钮让用户两次进入该网站

Facebook android sdk登录按钮让用户两次进入该网站,android,kotlin,facebook-sdk-4.0,Android,Kotlin,Facebook Sdk 4.0,我正在使用Facebook android登录sdk。当我尝试在没有使用内置web表单的设备上安装Facebook本机应用程序的情况下登录时,Facebook尝试登录两次。 我认为问题在于Facebook登录按钮。所以,我想知道是否有某种方法可以让FacebookLoginButton代替普通按钮,并且如果用户没有本机Facebook应用程序,就不需要登录两次 MyFacebookActivity的代码 class MyFacebookActivity : AppCompatActivity()

我正在使用Facebook android登录sdk。当我尝试在没有使用内置web表单的设备上安装Facebook本机应用程序的情况下登录时,Facebook尝试登录两次。 我认为问题在于Facebook登录按钮。所以,我想知道是否有某种方法可以让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)
}

}解决方案非常简单。Facebook登录按钮不需要onClickListener。它只有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")
            }

        })