Flutter+Firebase实现Twitter登录授权后无法返回应用问题求解
解决方案
1. 修正AndroidManifest.xml配置位置
- 你当前配置的intent-filter必须放在主启动Activity的标签内部,而非application全局标签下,正确层级示例:
<application android:name="io.flutter.app.FlutterApplication" android:label="social_demo" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- 原有启动intent-filter --> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <!-- 推特回调的intent-filter放这里 --> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="flutter-twitter-auth"/> </intent-filter> </activity> </application>
- Android 11及以上版本需要在
application标签同级新增queries配置,否则无法识别浏览器回调:
<queries> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="https" /> </intent> </queries>
2. 修复回调地址匹配问题
- 确认Twitter开发者后台的回调地址与代码中
redirectURI完全一致,你代码中配置的是flutter-twitter-auth://,后台不能多写路径后缀(比如flutter-twitter-auth://callback),前后必须完全匹配 - 确认Twitter开发者后台已开启3-legged OAuth开关,该开关未开启会导致回调直接失效
3. 修复版本兼容问题
你使用的twitter_login: ^4.0.1存在已知的回调处理bug,可通过两种方式修复:
- 升级包版本到最新稳定版
twitter_login: ^4.4.0 - 若升级后存在其他兼容问题,可降级到
twitter_login: ^3.0.1测试
4. 补充MainActivity回调处理
在安卓原生的MainActivity中重写onNewIntent方法,手动传递回调事件给插件:
// MainActivity.kt 示例 import android.content.Intent import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import com.roughike.twitter_login.TwitterLoginPlugin class MainActivity: FlutterActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) TwitterLoginPlugin.handleCallback(intent) } }
完成以上修改后清理项目缓存重新编译即可解决回调失败的问题。
内容的提问来源于stack exchange,提问作者Prabodh Bhatt
相关产品推荐
相关产品推荐

