You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase集成Facebook Auth遇致命异常:未配置有效Facebook App ID

解决Firebase集成Facebook Auth的常见问题

一、核心错误:Facebook App ID未正确配置

你遇到的A valid Facebook app id must be set...错误,根源在于你把Facebook的meta-data放在了FacebookLoginActivity标签内,而Facebook SDK需要全局的App ID配置,必须放在<application>标签下(作为直接子节点),不是单个Activity里。

修正后的Manifest配置

把Facebook App ID的meta-data移动到全局位置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.borisruzanov.social">
<uses-permission android:name="android.permission.INTERNET"/>
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme">
    
    <!-- 全局配置Facebook App ID,必须放在application标签下 -->
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

    <activity android:name=".AuthPage">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".GoogleSignInActivity" />
    <activity android:name=".PhoneAuthActivity" />
    <activity android:name=".FacebookLoginActivity" />
    
    <activity android:name="com.facebook.FacebookActivity" 
        android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
        android:label="@string/app_name" />
    <activity android:name="com.facebook.CustomTabActivity" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="@string/fb_login_protocol_scheme" />
        </intent-filter>
    </activity>
</application>
</manifest>

同时确保strings.xml里的两个值和Facebook开发者后台完全一致:

<string name="facebook_app_id">你的Facebook App ID</string>
<string name="fb_login_protocol_scheme">fb你的Facebook App ID</string>

二、SDK初始化代码被划掉的原因

你看到的sdkInitialize()方法被划掉,是因为Facebook SDK从4.22.0版本开始就支持自动初始化了——SDK会自动从Manifest里读取App ID完成全局初始化,不需要再手动调用FacebookSdk.sdkInitialize(getApplicationContext())这类代码,这个方法已经被废弃,直接删掉这行代码即可。

三、Firebase+Facebook Auth完整集成示例

1. 依赖配置(Module级build.gradle)

确保添加最新版的核心依赖:

// Firebase Auth核心依赖
implementation 'com.google.firebase:firebase-auth:22.3.1'
// Facebook Login SDK
implementation 'com.facebook.android:facebook-login:16.2.0'

2. FacebookLoginActivity核心代码

public class FacebookLoginActivity extends AppCompatActivity {

    private CallbackManager mCallbackManager;
    private FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_facebook_login);

        // 初始化Firebase Auth实例
        mAuth = FirebaseAuth.getInstance();

        // 初始化Facebook回调管理器
        mCallbackManager = CallbackManager.Factory.create();

        LoginButton loginButton = findViewById(R.id.login_button);
        // 设置需要获取的用户权限(邮箱+公开信息)
        loginButton.setPermissions(Arrays.asList("email", "public_profile"));

        // 绑定Facebook登录回调
        loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // 用Facebook凭证登录Firebase
                handleFacebookAccessToken(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
                Log.d("FacebookAuth", "用户取消登录");
            }

            @Override
            public void onError(FacebookException error) {
                Log.d("FacebookAuth", "登录错误:" + error.getMessage());
            }
        });
    }

    private void handleFacebookAccessToken(AccessToken token) {
        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, task -> {
                    if (task.isSuccessful()) {
                        // 登录成功,获取当前用户信息
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateLoginUI(user);
                    } else {
                        // 登录失败,提示错误
                        Toast.makeText(FacebookLoginActivity.this, "认证失败,请重试",
                                Toast.LENGTH_SHORT).show();
                        updateLoginUI(null);
                    }
                });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 将页面结果传递给Facebook回调管理器
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }

    private void updateLoginUI(FirebaseUser user) {
        if (user != null) {
            // 登录成功,跳转到主页或显示用户信息
            Toast.makeText(this, "登录成功:" + user.getDisplayName(), Toast.LENGTH_SHORT).show();
            startActivity(new Intent(this, MainActivity.class));
            finish();
        }
    }
}

3. Firebase控制台关键配置

  • 登录Firebase控制台,进入你的项目,打开Authentication -> Sign-in method
  • 启用Facebook登录,输入Facebook开发者后台的App ID和App Secret
  • 回到Facebook开发者后台,把Firebase提供的OAuth重定向URI添加到你的应用Valid OAuth Redirect URIs列表中

内容的提问来源于stack exchange,提问作者Boris Ruzanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:49:19