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

如何在Expo React Native应用中用自有Facebook应用登录而非Expo Go?

问题解决:Expo React Native Facebook登录显示Expo Go而非自定义应用信息

问题概述

在Expo React Native应用中基于Firebase实现Facebook登录时,使用了已废弃的expo-facebook模块,功能正常但Facebook登录网页UI显示的是Expo Go的应用名称和图标,修改initializeAsync中的appId也无法改变这一情况。

登录界面截图:
Facebook登录界面显示Expo Go

当前使用的登录代码:

import * as Facebook from "expo-facebook";
import firebase from "firebase/compat/app";
import "firebase/compat/auth";
import "firebase/compat/firestore";
import firebaseConfig from "../firebase";

firebase.initializeApp(firebaseConfig);

const facebookLogin = async (setName) => {
  try {
    await Facebook.initializeAsync({
      appId: "xxx",
      appName: "xxx",
    });
    const { type, token } = await Facebook.logInWithReadPermissionsAsync({
      permissions: ["public_profile"],
    });
    if (type === "success") {
        fetch(`https://graph.facebook.com/me?access_token=${token}`)
          .then((res) => res.json())
          .then((data) => {
            console.log(data);
            setName(data.name);
          })
          .catch((err) => console.log(err));
    }
  } catch ({ message }) {
    console.log(`Facebook login error: ` + message);
  }
};

export default facebookLogin;

问题原因

在Expo Go客户端中预览应用时,默认使用的是Expo官方的Facebook应用配置,所以登录界面会显示Expo Go的信息。另外expo-facebook模块已被官方废弃,不再维护,建议使用官方推荐的替代方案。

解决方案

1. 替换废弃模块,使用expo-auth-session实现登录

官方推荐使用expo-auth-session替代expo-facebook,步骤如下:

  • 安装依赖:
expo install expo-auth-session expo-web-browser
  • 在Facebook开发者平台中,配置你的应用回调URL,格式为:https://auth.expo.io/@你的Expo用户名/你的应用slug(可在app.json的expo.slug字段找到应用slug)
  • 修改登录代码,集成Firebase:
import * as AuthSession from 'expo-auth-session';
import * as WebBrowser from 'expo-web-browser';
import firebase from "firebase/compat/app";
import "firebase/compat/auth";
import firebaseConfig from "../firebase";

firebase.initializeApp(firebaseConfig);

// 配置Facebook OAuth参数
const FACEBOOK_CLIENT_ID = '你的Facebook App ID';
const redirectUri = AuthSession.makeRedirectUri({
  useProxy: true,
});

WebBrowser.maybeCompleteAuthSession();

const facebookLogin = async (setName) => {
  try {
    const authRequest = await AuthSession.getAuthRequestAsync({
      clientId: FACEBOOK_CLIENT_ID,
      scopes: ['public_profile'],
      redirectUri,
    });

    const response = await AuthSession.startAsync(authRequest);
    if (response.type === 'success') {
      const { access_token } = response.params;
      // 获取用户信息
      const userInfoResponse = await fetch(`https://graph.facebook.com/me?access_token=${access_token}&fields=name`);
      const userInfo = await userInfoResponse.json();
      setName(userInfo.name);

      // 可选:将Facebook令牌传给Firebase进行认证
      const credential = firebase.auth.FacebookAuthProvider.credential(access_token);
      await firebase.auth().signInWithCredential(credential);
    }
  } catch (error) {
    console.log(`Facebook登录错误: ${error.message}`);
  }
};

export default facebookLogin;

2. 显示自定义应用名称和图标

要让登录界面显示你自己的应用名称和图标,无法在Expo Go中实现,必须构建自定义开发客户端:

  • 确保已安装EAS CLI:npm install -g eas-cli
  • 登录Expo账户:eas login
  • 构建自定义开发客户端:
eas build --profile development --platform android # 或 ios
  • 安装构建好的自定义客户端到设备上,使用该客户端预览应用,此时Facebook登录界面就会显示你在Facebook开发者平台配置的应用名称和图标了。

内容的提问来源于stack exchange,提问作者Dương Tùng Anh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:24:29