Android 使用Facebook登录小部件按钮时,Facebook登录意图被调用两次
我正在尝试将Facebook身份验证应用到我的kotlin应用程序中,我已使其成功运行,但每次调用Facebook登录意图时,它都会在您单击“继续登录”后第二次弹出该活动。我发现有人说只使用普通按钮,而不是我尝试过的Facebook按钮,这样就消除了这个问题,但看起来没有那么好。我想知道是否有人知道一种不用普通按钮就能解决这个问题的方法 按钮:Android 使用Facebook登录小部件按钮时,Facebook登录意图被调用两次,android,facebook,kotlin,Android,Facebook,Kotlin,我正在尝试将Facebook身份验证应用到我的kotlin应用程序中,我已使其成功运行,但每次调用Facebook登录意图时,它都会在您单击“继续登录”后第二次弹出该活动。我发现有人说只使用普通按钮,而不是我尝试过的Facebook按钮,这样就消除了这个问题,但看起来没有那么好。我想知道是否有人知道一种不用普通按钮就能解决这个问题的方法 按钮: <com.facebook.login.widget.LoginButton android:onClick=
<com.facebook.login.widget.LoginButton
android:onClick="@{loginSelectViewModel::goToFacebook}"
android:layout_width="match_parent"
android:layout_height="90dp"
android:paddingTop="32dp"
android:paddingBottom="32dp"
android:id="@+id/btn_login_facebook"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="16dp" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="16dp" android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/btn_login_google"/>
片段函数:
override fun onClickFacebookSignIn(view: View) {
Timber.d("onClickFacebookSignIn: called")
val loginManager = LoginManager.getInstance()
loginManager.registerCallback(callbackManager, object : FacebookCallback<LoginResult>{
override fun onSuccess(result: LoginResult?) {
Timber.d("loginmanager: onSuccess called")
viewModel.facebookLogin(result?.accessToken)
}
override fun onCancel() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onError(error: FacebookException?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
})
loginManager.logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))
}
override fun onClickFacebookSignIn(视图:视图){
木材d(“onClickFacebookSignIn:命名”)
val loginManager=loginManager.getInstance()
registerCallback(callbackManager,对象:FacebookCallback{
成功时覆盖乐趣(结果:LoginResult?){
Timber.d(“loginmanager:onSuccess调用”)
viewModel.facebookLogin(结果?.accessToken)
}
重写fun onCancel(){
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
重写错误(错误:FacebookException?){
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
})
loginManager.logInWithReadPermissions(这个、Arrays.asList(“public_profile”、“email”))
}
据我所知,on success被调用了两次,但实际上“onClickFacebookSignIn”功能只被调用了一次。在多看了几个小时后,我发现Facebook登录按钮小部件具有调用Facebook登录活动的附加功能。我的应用程序并没有设置为拦截这个登录活动实例,所以我最终只是创建了一个看起来像Facebook按钮的按钮。对于需要此解决方案的任何人,这就是我的按钮XML的外观
<Button
android:onClick="@{loginSelectViewModel::goToFacebook}"
android:id="@+id/btn_login_facebook"
android:layout_width="match_parent"
android:layout_height="90dp"
android:layout_marginStart="16dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="16dp"
android:background="#3B5998"
android:backgroundTint="#3B5998"
android:text="@string/login_select_facebook"
android:textSize="18sp"
android:textColor="#ffffff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_login_google" />
<Button
android:onClick="@{loginSelectViewModel::goToFacebook}"
android:id="@+id/btn_login_facebook"
android:layout_width="match_parent"
android:layout_height="90dp"
android:layout_marginStart="16dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="16dp"
android:background="#3B5998"
android:backgroundTint="#3B5998"
android:text="@string/login_select_facebook"
android:textSize="18sp"
android:textColor="#ffffff"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_login_google" />