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

Expo React Native集成Firebase手机号认证Web正常移动端报错闪退

问题根本原因

你的报错核心是两个问题:

  • 使用的expo-firebase-recaptcha@2.0.2版本没有实现Firebase v9.5+新增的_reset内部方法,导致iOS端调用时报错
  • 不可见reCAPTCHA初始化逻辑在Android端低版本expo存在稳定性缺陷,同时你混用了Firebase兼容层与模块化API导致参数类型不匹配,触发闪退

可行解决方案

  • 方案1:版本适配(最稳定)
    修改package.json中的firebase版本为当前expo-firebase-recaptcha兼容的最高版本:
"firebase": "9.4.1"

修改后删除node_modules、package-lock.json/yarn.lock文件,重新执行npm install或yarn install安装依赖即可。

  • 方案2:补全缺失方法(快速修复,无需降级版本)
    在PhoneLoginScreen.js中添加useEffect逻辑,为reCAPTCHA验证器补全_reset空实现:
// 顶部先导入useEffect
import React, { useRef, useState, useEffect } from "react"

// 在组件内部添加以下逻辑
useEffect(() => {
  if (recaptchaVerifier.current) {
    recaptchaVerifier.current._reset = () => {}
  }
}, [])
  • 方案3:修复Android闪退
    将attemptInvisibleVerification参数改为false,关闭不稳定的不可见验证功能:
const attemptInvisibleVerification = false
  • 方案4:修正Firebase导出逻辑,避免API混用
    将firebase.js的内容替换为全模块化实现,消除兼容层与新版API的冲突:
import { initializeApp, getApp } from "firebase/app";
import { getAuth } from "firebase/auth";

const firebaseConfig = {
    // 你的Firebase配置信息
};

let firebaseApp;
try {
  firebaseApp = getApp();
} catch {
  firebaseApp = initializeApp(firebaseConfig);
}

const auth = getAuth(firebaseApp);
export { auth, firebaseApp };

内容的提问来源于stack exchange,提问作者Deon Okonkwo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:36:08