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

Firebase Cordova Google登录报错auth/redirect-cancelled-by-user求助

解决Cordova + Firebase Google登录重定向返回时的auth/redirect-cancelled-by-user错误

我之前在做Cordova+Firebase Google登录时也碰到过完全一样的问题,折腾了好几天才摸清楚几个有效的排查方向,分享给你:

1. 核对Firebase控制台的Android应用配置

这是最容易踩坑的环节,一定要逐字核对:

  • 包名一致性:Firebase里的Android应用包名必须和你Cordova项目config.xml里的<widget id="com.your.package.name"完全匹配,大小写、标点都不能错。
  • SHA-1指纹配置:要同时添加debug和release环境的SHA-1。debug环境可以用这条命令获取:
    keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
    
    把输出的SHA-1复制到Firebase控制台的Android应用设置里,保存后等待10分钟左右让配置生效。
  • 重定向URI检查:Firebase生成的重定向URI应该是com.your.package.name:/oauth2redirect/google,确认这个URI已经被正确添加到Google Cloud Console的OAuth 2.0客户端ID的授权重定向URI列表(Firebase通常会自动同步,但偶尔需要手动验证)。

2. 检查Cordova插件的配置与版本

确保你安装了官方要求的插件,并且配置了正确的intent filter:

  • 先卸载旧插件,重装最新稳定版:
    cordova plugin remove cordova-plugin-browsertab cordova-plugin-inappbrowser
    cordova plugin add cordova-plugin-browsertab cordova-plugin-inappbrowser
    
  • 在config.xml的<platform name="android">标签内添加intent filter,scheme必须和你的包名一致:
    <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="com.your.package.name" />
    </intent-filter>
    

3. 调整Firebase Auth代码的执行时机

Ionic的ngOnInit会在页面初始化时触发,但这时候Cordova的deviceready事件可能还没完成,Firebase还没完全初始化,导致重定向回来时无法正确捕获结果。你需要把Firebase相关代码放到deviceready回调里:

document.addEventListener("deviceready", () => {
  // 初始化Firebase(如果还未初始化)
  firebase.initializeApp(yourFirebaseConfig);

  // 在这里执行getRedirectResult
  firebase.auth().getRedirectResult().then(function(result) {
    if (result.credential) {
      var token = result.credential.accessToken;
      var user = result.user;
      console.log(user);
    }
  }).catch(function(error) {
    console.log(error);
  });

  // onAuthStateChanged也移到这里
  firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
      console.log('Observer');
      console.log(user);
    }
  });
}, false);

4. 测试环境的注意事项

  • 不要用模拟器测试:模拟器的Google Play服务可能不全,容易导致登录流程异常,建议用真实Android设备测试。
  • 清除应用缓存数据:测试前先清除应用的缓存和数据,避免旧会话导致重定向冲突。
  • 检查Google Play服务版本:确保设备上的Google Play服务是最新版本,且已经登录有效的Google账号。

如果以上步骤都试过还是不行,可以尝试降级Firebase JS SDK到v8.x版本(最新的v9模块化版本可能和Cordova插件兼容性不佳),或者检查AndroidManifest.xml里有没有插件自动添加的错误配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:03