You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Facebook Android SDK登录时自动关闭当前Activity问题求助

解决Facebook Login Manager导致当前Activity自动关闭的问题

嘿,我之前也踩过类似的坑,咱们一步步来排查和解决:

  • 确认接口实现与回调方法
    首先得确保你的当前Activity已经正确实现了FacebookCallback<LoginResult>接口,并且重写了onSuccessonCancelonError这三个必须的方法。要是漏了实现或者重写,Facebook的回调机制可能会抛出异常,间接导致Activity被系统回收或者跳转异常。

  • 检查Manifest配置是否完整
    Facebook登录需要在AndroidManifest.xml里添加特定配置,少一项都可能出问题:

    <!-- Facebook登录所需的Activity声明 -->
    <activity android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name" />
    <!-- 绑定你的Facebook App ID -->
    <meta-data android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id"/>
    

    同时要保证strings.xml里的facebook_app_id和你在Facebook开发者后台创建的App ID完全一致,大小写和字符都不能错。

  • 处理Activity的生命周期回调
    一定要在当前Activity的onActivityResult方法里调用callbackManager.onActivityResult(),而且要放在super.onActivityResult()之前,不然登录结果无法正确传递,可能导致流程中断:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        callbackManager.onActivityResult(requestCode, resultCode, data)
        super.onActivityResult(requestCode, resultCode, data)
    }
    
  • 确认当前Activity的状态
    调用logInWithReadPermissions之前,检查一下当前Activity是否处于活跃状态,避免在Activity即将销毁或者已经finish的时候发起登录:

    if (!currentActivity.isFinishing && !currentActivity.isDestroyed) {
        loginManager.logInWithReadPermissions(currentActivity, arrayListOf("public_profile", "email", "user_friends"))
    }
    
  • 排查其他代码干扰
    最后检查下你的代码里有没有其他地方意外调用了finish()方法,或者有广播接收器、生命周期回调(比如onPauseonStop)里的逻辑导致当前Activity被关闭。

内容的提问来源于stack exchange,提问作者Puneet Kala

火山引擎 最新活动