Flutter Android Release模式下重定向URI出现重复选项问题
解决Flutter Spotify授权时Android弹出多个应用选项的问题
问题分析
出现两个应用选项的核心原因是系统识别到多个能处理spotify-callback URI的组件——要么是你的应用内部存在重复的Intent Filter配置,要么是自定义Scheme未做专属关联导致浏览器也参与竞争。删除配置后无法获取令牌,是因为授权回调失去了接收入口。
解决方案
1. 排查并移除重复的Intent Filter
- 打开Android Studio的
Merged Manifest视图(Manifest编辑器底部标签),检查最终生成的清单文件中是否存在多个包含spotify-callbackscheme的<intent-filter>。 - 确保只有一个针对回调URI的Intent Filter,配置在主Activity下,示例如下:
<activity android:name="com.your.app.package.MainActivity"> <!-- 其他原有配置 --> <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="spotify-callback" /> </intent-filter> </activity> - 检查build.gradle中是否有构建变体(debug/release)额外注入的Manifest配置,避免合并后出现重复条目。
2. 配置Android App Links实现无选择直接跳转
普通自定义Scheme会触发系统选择器,改用App Links可以让系统直接关联你的应用:
- 将Spotify开发者后台的重定向URI改为HTTPS格式(比如
https://yourdomain.com/spotify-callback)。 - 在Manifest中更新Intent Filter,添加
android:autoVerify="true"并配置HTTPS相关参数:<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="https" android:host="yourdomain.com" android:path="/spotify-callback" /> </intent-filter> - 在你的域名下放置
assetlinks.json文件,路径为https://yourdomain.com/.well-known/assetlinks.json,内容需包含你release应用的包名和SHA256签名指纹:[ { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.your.app.package", "sha256_cert_fingerprints": ["你的Release签名SHA256指纹"] } } ] - 获取SHA256指纹可通过命令:
keytool -list -v -keystore your-release-keystore.jks -alias your-key-alias
3. 验证Spotify后台的签名配置
确保Spotify开发者后台中,你应用的重定向URI对应的Android应用签名是release版本的SHA256指纹——debug和release签名不同会导致系统识别为不同应用,触发选择器。
4. 清理系统缓存
进入系统设置 → 应用 → 你的应用 → 清除默认打开方式,再清除应用缓存,避免系统保留旧的URI关联记录。
内容的提问来源于stack exchange,提问作者Joel Castro
相关产品推荐
相关产品推荐

