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环境可以用这条命令获取:
把输出的SHA-1复制到Firebase控制台的Android应用设置里,保存后等待10分钟左右让配置生效。keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - 重定向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
相关产品推荐
相关产品推荐

