首页 > 解决方案 > 使用 Facebook 登录小部件按钮时,Facebook 登录意图被调用两次

问题描述

我正在尝试将 Facebook 身份验证放入我的 kotlin 应用程序中,并且我已经成功运行,但是每次调用 Facebook 登录意图时,它都会在您单击继续登录后第二次弹出活动。我发现人们说只使用一个普通按钮而不是我尝试过的 Facebook 按钮,它消除了问题,但看起来不太好。我想知道是否有人知道在不使用普通按钮的情况下解决此问题的方法。

按钮:

  <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"/>

查看调用侦听器以触发我的片段中的函数的模型函数:

fun goToFacebook(view: View){
        Timber.d("goToFacebook: Called")
        authListener?.onStarted()
        authListener?.onClickFacebookSignIn(view)
    }

片段功能:

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"))
    }

据我所知,on success 被调用了两次,但实际上“onClickFacebookSignIn”函数只被调用了一次。

标签: androidfacebookkotlin

解决方案


又看了几个小时后,我发现 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" />

推荐阅读