(iOS) Spotify 重定向 URI 错误:SpotifyLogin.LoginError.invalidUrl

Posted

技术标签:

【中文标题】(iOS) Spotify 重定向 URI 错误:SpotifyLogin.LoginError.invalidUrl【英文标题】:(iOS) Spotify Redirect URI Error: SpotifyLogin.LoginError.invalidUrl 【发布时间】:2021-06-06 20:43:36 【问题描述】:

我正在尝试使用Spotify's Sample Project 实现使用 Spotify 登录。一直失败

由于我按照所有说明进行操作,因此不太确定可能是什么问题:

我的重定向 URL spotifyApp://spotify-login-callback 在重定向 URI 下正确注册 我的 URL Scheme 是spotifyApp 我的客户端 ID 和密码已复制粘贴,如开发者控制台上所示
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        let redirectURL: URL = URL(string: "spotifyApp://spotify-login-callback")!
        SpotifyLogin.shared.configure(clientID: "#####1",
                                      clientSecret: "#####1",
                                      redirectURL: redirectURL)
        return true
    

作为用户,我被带到 Spotify 授权页面并被重定向回应用程序,UI 和错误没有任何变化

SpotifyLogin.LoginError.invalidUrl

更新

SpotifyLogin的源代码中,显示invalidUrl表示The url provided to the app can not be handled or parsed.

这是返回错误的代码

    /// Process URL and attempts to create a session.
///
/// - Parameters:
///   - url: url to handle.
///   - completion: Returns an optional error or nil if successful.
/// - Returns: Whether or not the URL was handled.
public func applicationOpenURL(_ url: URL, completion: @escaping (Error?) -> Void) -> Bool 
    guard let urlBuilder = urlBuilder,
        let redirectURL = redirectURL,
        let clientID = clientID,
        let clientSecret = clientSecret else 
        DispatchQueue.main.async 
            completion(LoginError.configurationMissing)
        
        return false
    

    guard urlBuilder.canHandleURL(url) else 
        DispatchQueue.main.async 
            completion(LoginError.invalidUrl)
        
        return false
    

    safariVC?.dismiss(animated: true, completion: nil)

    let parsedURL = urlBuilder.parse(url: url)
    if let code = parsedURL.code, !parsedURL.error 
        Networking.createSession(code: code,
                                 redirectURL: redirectURL,
                                 clientID: clientID,
                                 clientSecret: clientSecret,
                                 completion:  [weak self] session, error in
            DispatchQueue.main.async 
                if error == nil 
                    self?.session = session
                    NotificationCenter.default.post(name: .SpotifyLoginSuccessful, object: nil)
                
                completion(error)
            
        )
     else 
        DispatchQueue.main.async 
            NotificationCenter.default.post(name: .SpotifyLoginSuccessful, object: nil)
            completion(LoginError.invalidUrl)
        
    
    return true

【问题讨论】:

【参考方案1】:

显然问题出在重定向 URI 本身

URI 不应包含大写字母 它应该遵循这种格式(没有括号)

((add_your_unique_scheme))://callback/

【讨论】:

以上是关于(iOS) Spotify 重定向 URI 错误:SpotifyLogin.LoginError.invalidUrl的主要内容,如果未能解决你的问题,请参考以下文章

spotify 的重定向 URI 无效

没有重定向 URI 的 Spotify?

PHP 中的 Spotify API 身份验证 - 重定向 URI 无效

Spotifyr 错误:INVALID_CLIENT:重定向 URI 无效

我该如何处理 Django 中的 spotify api 身份验证重定向 uri?

Flutter:Oauth2 - 重定向 uri 的问题