You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 22:45:05