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

Expo React Native Android端Google登录EventEmitter弃用警告修复方案

问题原因

该警告并非业务代码写法错误,是旧版本expo-web-browser和expo-auth-session内部实现使用了React Native已废弃的EventEmitter.removeListenerAPI,对应问题已经在新版依赖中修复。

解决方案
  • 优先升级相关依赖到修复版本,在项目根目录执行命令:
npx expo install expo-auth-session expo-web-browser

执行完成后清缓存重启项目(执行npx expo start -c),重新触发登录流程即可看到警告消失。

  • 若升级依赖后警告仍存在,排查项目中是否有手动监听url事件的代码,旧版的removeListener写法需要替换为新版标准写法,参考示例:
import { Linking } from 'react-native';

useEffect(() => {
  const subscription = Linking.addEventListener('url', ({ url }) => {
    // 自定义url回调处理逻辑
  });
  return () => {
    // 新版要求通过订阅实例的remove方法移除监听
    subscription.remove();
  };
}, []);

注:贴出的现有业务代码中无手动编写的url监听逻辑,该步骤仅作全局排查参考。

  • 附可选代码优化(与警告无关,修复登录竞态问题):现有代码中signInWithCredential为异步方法,未等待登录态写入完成就执行页面跳转,存在偶现的登录态丢失问题,可将对应useEffect逻辑调整为:
useEffect(() => {
  const handleAuth = async () => {
    if (response?.type === "success") {
      const { id_token } = response.params;
      const authInstance = getAuth();
      const credential = GoogleAuthProvider.credential(id_token);
      await signInWithCredential(authInstance, credential);
      navigation.navigate("ShowList");
    }
  };
  handleAuth();
}, [response]);
临时兼容方案(不推荐)

如果项目存在依赖锁版本要求暂时无法升级,可在项目入口文件(通常为App.js)顶部添加如下代码,过滤该特定警告:

import { LogBox } from 'react-native';
LogBox.ignoreLogs([
  "EventEmitter.removeListener('url', ...): Method has been deprecated"
]);

该方案仅做视觉上的警告隐藏,没有真正修复API调用问题,条件允许时优先选择升级依赖的方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:36:39