android - 使用 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”函数只被调用了一次。
解决方案
又看了几个小时后,我发现 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" />
推荐阅读
- python - 哪个是最简单(最快且可能不安全)的可逆固定大小保长对称密码学?
- ios - compactMapValues 不过滤 nil 值
- rust - 结构中的 Rust 生命周期范围
- azure-devops - 组织之间的 Azure DevOps Repos 同步
- c - 如何使用android内核源代码在文件中运行写东西?
- c++ - 在 C++ 中的任何给定时间只运行给定数量的线程
- python-3.x - 使用 os.path 和 pathlib Mac OSX Catalina 时的奇怪路径行为
- python-3.x - 如何加快 SpaCy 的依赖解析?
- arrays - 将 API 返回数组数据从父组件传递给 Angular 中的子组件
- python - 为什么 exec() 很危险?