Spotify Android SDK示例应用在Automotive虚拟设备运行报错求助
错误原因分析
- 本质是Spotify Android SDK旧版Authentication库的重定向校验逻辑缺陷:SDK内置的WebView登录组件默认会拦截所有跳转请求,直接和预设的应用回调URI做匹配,不会区分OAuth流程的中间跳转和最终回调。在Automotive设备上登录Spotify时如果触发了Google账号关联认证,中间跳转的Google OAuth链接会被SDK当成最终响应URI,直接触发不匹配报错。
- Android Automotive镜像的WebView默认配置和普通手机镜像存在差异,不会自动透传第三方域名的中间跳转请求,导致SDK提前终止了登录流程。
解决方案
方案1:升级Spotify Android SDK到最新正式版
新版SDK已经适配了车载场景的登录逻辑,会自动跳过OAuth流程中的可信第三方域名中间跳转,仅对最终回调的自定义Scheme URI做匹配校验,直接更新项目依赖的app-remote-lib和auth-lib版本即可修复问题。
方案2:自定义修改登录跳转校验逻辑(无法升级SDK时使用)
直接拷贝官方SDK中LoginDialog类的源码到你的项目本地,修改shouldOverrideUrlLoading方法的校验逻辑,放行登录流程的可信域名跳转:
@Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String currentUrl = request.getUrl().toString(); // 放行登录流程中的可信域名跳转,不做重定向校验 if (currentUrl.startsWith("https://accounts.spotify.com") || currentUrl.startsWith("https://accounts.google.com")) { return false; } // 仅当跳转URI和预设回调完全匹配时,执行后续回调逻辑 if (currentUrl.startsWith(REDIRECT_URI)) { // 原有校验、解析回调参数的逻辑保持不变 return true; } // 非法跳转才抛出匹配错误 throw new RuntimeException("Can't redirect due to mismatch."); }
方案3:切换外部浏览器完成登录
在初始化认证请求时指定使用系统外部浏览器而非SDK内置WebView完成登录:
AuthorizationRequest authRequest = new AuthorizationRequest.Builder( YOUR_CLIENT_ID, AuthorizationResponse.Type.CODE, YOUR_REDIRECT_URI ) .setScopes(new String[]{"user-read-private", "streaming"}) // 替换为你需要的权限 .build(); AuthorizationClient.openLoginActivity(this, LOGIN_REQUEST_CODE, authRequest);
Android Automotive的系统浏览器会自动处理登录全流程的所有跳转,完成认证后会正确回调到你配置的自定义Scheme URI,不会触发匹配错误。
内容的提问来源于stack exchange,提问作者Kumar Sri Harsh
相关产品推荐
相关产品推荐

