使用Firebase SDK认证时遭遇redirect-cancelled-by-user错误
我之前用Cordova做Firebase安卓OAuth认证时,也踩过redirect-cancelled-by-user这个坑——Web端一切正常,安卓端死活报错,折腾了好一阵才找到问题。结合我的经验,大概率是下面几个配置细节没到位,你可以逐一排查:
1. AndroidManifest.xml 里的 Intent Filter 配置缺失或错误
这是最常见的原因。Web端的重定向是浏览器处理的,但安卓端需要让系统知道,把认证后的回调请求交给你的App处理,否则系统会默认取消这个跳转。
你需要在AndroidManifest.xml的<activity>标签里(对应主Activity或者处理认证的Activity)添加正确的Intent Filter,示例如下:
<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:host="YOUR_FIREBASE_APP_ID.firebaseapp.com" android:path="/__/auth/handler" android:scheme="YOUR_APP_PACKAGE_NAME" /> </intent-filter>
注意替换:
YOUR_FIREBASE_APP_ID:你的Firebase项目ID(在Firebase控制台设置里能找到)YOUR_APP_PACKAGE_NAME:你的Cordova应用包名(和Firebase控制台里添加安卓应用时填的包名必须完全一致)
2. Firebase控制台的 OAuth 重定向 URI 未配置安卓端的回调地址
虽然Web端的重定向URI已经配置正确,但安卓端需要单独添加对应的回调地址到Firebase控制台的OAuth提供商设置里:
- 打开Firebase控制台 → 认证 → 登录方法
- 选择你用的OAuth提供商(比如Google、Facebook)
- 在“授权重定向URI”列表里,添加格式为:
YOUR_APP_PACKAGE_NAME://YOUR_FIREBASE_APP_ID.firebaseapp.com/__/auth/handler的地址 - 保存设置,等待5-10分钟让配置生效(Firebase的配置有时候需要一点同步时间)
3. Cordova插件版本不兼容或配置错误
- 确保你用的Firebase认证插件(比如
cordova-plugin-firebase-authentication)是最新稳定版,旧版本可能存在安卓重定向的bug。可以用cordova plugin update cordova-plugin-firebase-authentication更新。 - 如果你用到了
cordova-plugin-inappbrowser,也要确保版本适配,Firebase的重定向依赖这个插件来打开认证页面并捕获回调。 - 检查插件的初始化代码,确保在调用
signInWithRedirect()之前,Firebase已经完成初始化。
4. ProGuard 混淆规则导致 Firebase SDK 功能异常
如果你的安卓开启了ProGuard混淆,需要在proguard-rules.pro里添加Firebase的保留规则,否则SDK的核心类被混淆后会导致重定向逻辑失效:
-keep class com.google.firebase.** { *; } -keep class com.google.android.gms.** { *; }
5. 设备系统设置或临时状态问题
- 部分设备的默认浏览器不是Chrome,可能会影响重定向逻辑,建议暂时切换为Chrome作为默认浏览器测试。
- 重启设备和清除App缓存,有时候临时的状态异常也会导致这个错误。
排查完这些点,应该能解决redirect-cancelled-by-user的问题。我当时就是漏加了Intent Filter,导致系统无法把回调交给App,才出现的错误。
内容的提问来源于stack exchange,提问作者Alex Choroshin




