安卓Facebook登录失败,没有异常提示,只显示“抱歉,出了些问题”。

7
我正在尝试将Facebook登录功能集成到我的应用程序中,但我遇到了一个非常奇怪的问题:登录过程开始后,出现了一个非常神秘的错误消息,并且我的应用程序没有抛出任何异常,所以我不知道发生了什么。
我怀疑这与我在登录过程中使用DialogFragment有关,而Facebook的LoginButton是该DialogFragment的一部分,而不是普通的fragment或activity。我在XML中添加了登录按钮:
 <com.facebook.login.widget.LoginButton
        android:id="@+id/loginFacebookButton"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/default_margin_double"
        android:layout_marginEnd="@dimen/default_margin_double"
        android:layout_marginBottom="@dimen/default_margin"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        tools:background="@drawable/rounded_blue_bg"
        android:layout_marginTop="@dimen/default_margin"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingLeft="@dimen/default_margin_double"
        app:layout_constraintBottom_toTopOf="@id/loginOrLayout" />

我会在我的onCreateDialog中添加回调函数。

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val dialog = super.onCreateDialog(savedInstanceState)
    setStyle(STYLE_NORMAL, R.style.FullscreenDialog)

    val view = View.inflate(context, R.layout.fragment_login, null)

    //FB Login callback manager
    val callbackManager = CallbackManager.Factory.create()
    val fbLoginButton = view.loginFacebookButton
    fbLoginButton.fragment = this
    fbLoginButton.setPermissions(listOf("name", "email", "public_profile"))
    fbLoginButton.loginBehavior = LoginBehavior.NATIVE_WITH_FALLBACK
    fbLoginButton.registerCallback(callbackManager,
            object : FacebookCallback<LoginResult> {
                override fun onSuccess(loginResult: LoginResult) {
                    fbLoginSuccessful(loginResult)
                }

                override fun onCancel() {}

                override fun onError(exception: FacebookException) {
                    Log.w(TAG, "onError: Failed to login with FB.", exception)
                    loginFailed(exception.localizedMessage)
                }
            })

    return dialog
}

当我按下登录按钮时,会出现一个加载进度条,然后打开Facebook应用程序,我点击我的帐户,然后经过一些加载后,会出现这个屏幕:

Facebook Login Error

我已经按照这里的文档进行操作,但似乎无法使其工作。非常感谢任何帮助。我甚至像文档中提到的那样在我的代码中打印了密钥哈希,并且在开发者控制台中也有正确的哈希值,但仍然出现错误。谢谢。

1
你的手机里下载了Facebook应用吗? - Anastasios Zympidis
@DanAbnormal 很遗憾,我也在Facebook开发者支持论坛上发布了帖子,但那里也没有得到回复。我的应用程序已准备好投入生产,这是唯一阻碍我们前进的问题... 我将尝试创建一个虚拟应用程序,并使用完全相同的步骤添加FB登录,看看是否有效。如果您发现什么,请告诉我。 - Lucas P.
@DanAbnormal 我今天又尝试了一次,终于成功了。我不确定这是否真的是 Facebook 的问题,请查看下面的答案获取更多信息。 - Lucas P.
@LucasP,谢谢你。我会去看看! - Dan Abnormal
@LucasP。实际上,最终它并没有起作用。但是,跳过fb登录按钮,改用自定义UIButton和LoginManager后,一切都正常工作了! - Dan Abnormal
显示剩余4条评论
3个回答

1

编辑以添加Sourabh的评论:“我发现了我的代码问题。原来我发送的权限是大写的“EMAIL”(EMAIL)。必须多次检查我的代码的每一行。很遗憾,他们没有发送精确的错误消息。”

根据Sourabh的评论,我在logIn facebook函数中修复了这个错误,检查权限。仔细检查您的权限,如果不起作用,请尝试只发送电子邮件,看看是否有效。


1

对我来说,这是一个权限问题,我将“移动设备”也添加到了权限中,然后出现了这个错误。删除它后,一切似乎都正常工作了。


1

看起来我的片段中缺少以下内容:

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

然而,这可能与实际的FB活动返回之前抛出错误无关,因此可能是Facebook内部错误已经修复了。
祝所有遇到类似问题的人好运,因为FB SDK的支持几乎不存在。

仍然得到这个错误!我也有这个重写方法。 - Sourabh
我仍然没有弄清楚问题出在哪里(是我的问题还是Facebook的问题)。不过我创建了一个新的虚拟应用程序,它具有与我的“LoginFragment”相同的结构(这意味着我正在使用导航组件和DialogFragment),并在那里实现了FB登录按钮,它可以正常工作。然后将其从原始项目中删除并重新添加后,它再次正常工作。我不确定发生了什么。 - Lucas P.
4
我找到了代码的问题。原来我在发送权限"email"时使用了大写字母(EMAIL)。不得不多次检查我的代码的每一行。很糟糕,他们没有发送精确的错误消息。 - Sourabh
如果使用androidx库,您就不需要它。 - user924

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接