Метод didInititate для Spotify IOS SDK не вызывается, хотя называется sessionManager.initiateSession () - PullRequest
1 голос
/ 19 июня 2020

Я прохожу процесс аутентификации Spotify и запрашиваю области appRemoteControl для моего приложения, чтобы управлять musi c и userReadCurrentlyPlaying для текущей песни. Я настроил все, начиная с SPTConfiguration, SPTSessionManager и SPTAppRemote, и их необходимые методы делегата (SPTAppRemoteDelegate, SPTSessionManagerDelegate, SPTAppRemotePlayerStateDelegate), а также инициировал сеанс с запрошенными областями действия всякий раз, когда пользователь не может нажать кнопку *, но я 1001 *

func sessionManager(manager: SPTSessionManager, didInitiate session: SPTSession) {
    appRemote.connectionParameters.accessToken = session.accessToken
    appRemote.connect()
    print(session.accessToken)
}

для запуска. Процесс аутентификации полностью работает, поскольку он входит в мое приложение spotify и возвращается обратно в мое приложение и воспроизводит песню из конфигурации.playURI = "", однако указанный выше метод никогда не вызывается. Я следил за демонстрационным проектом Spotify, но все еще не работает. Вот мой полный код

class LogInViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

let spotifyClientID = Constants.clientID
let spotifyRedirectURL = Constants.redirectURI

let tokenSwap = "https://***********.glitch.me/api/token"
let refresh = "https://***********.glitch.me/api/refresh_token"

lazy var configuration: SPTConfiguration = {
    let configuration = SPTConfiguration(clientID: spotifyClientID, redirectURL: URL(string: "Lyrically://callback")!)
    return configuration
}()

lazy var sessionManager: SPTSessionManager = {
    let manager = SPTSessionManager(configuration: configuration, delegate: self)
    if let tokenSwapURL = URL(string: tokenSwap), let tokenRefreshURL = URL(string: refresh) {
        self.configuration.tokenSwapURL = tokenSwapURL
        self.configuration.tokenRefreshURL = tokenRefreshURL
        self.configuration.playURI = ""
    }
    return manager
}()

lazy var appRemote: SPTAppRemote = {
    let appRemote = SPTAppRemote(configuration: configuration, logLevel: .debug)
    appRemote.delegate = self
    return appRemote
}()

@IBAction func logIn(_ sender: UIButton) {
    let requestedScopes: SPTScope = [.appRemoteControl, .userReadCurrentlyPlaying]
    sessionManager.initiateSession(with: requestedScopes, options: .default)
}

}

extension LogInViewController: SPTAppRemotePlayerStateDelegate {
func playerStateDidChange(_ playerState: SPTAppRemotePlayerState) {
    print("state changed")
}

}

extension LogInViewController: SPTAppRemoteDelegate {
func appRemoteDidEstablishConnection(_ appRemote: SPTAppRemote) {
    print("connected")
    appRemote.playerAPI?.delegate = self
    appRemote.playerAPI?.subscribe(toPlayerState: { (success, error) in
        if let error = error {
            print("Error subscribing to player state:" + error.localizedDescription)
        }
    })
}

func appRemote(_ appRemote: SPTAppRemote, didFailConnectionAttemptWithError error: Error?) {
    print("failed")
}

func appRemote(_ appRemote: SPTAppRemote, didDisconnectWithError error: Error?) {
    print("disconnected")
}

}

extension LogInViewController: SPTSessionManagerDelegate {

func sessionManager(manager: SPTSessionManager, didInitiate session: SPTSession) {
    appRemote.connectionParameters.accessToken = session.accessToken
    appRemote.connect()
    print(session.accessToken)
}

func sessionManager(manager: SPTSessionManager, didFailWith error: Error) {
    print("failed",error)
}

}

1 Ответ

0 голосов
/ 20 июня 2020

Разобрался. Пришлось получить sessionManager из LogInViewController, создав его экземпляр

lazy var logInVC = LogInViewController()

, а затем добавил эту строку кода в метод openURLContexts в делегате сцены

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    print("Opened url")
    guard let url = URLContexts.first?.url else {
       return
    }
    logInVC.sessionManager.application(UIApplication.shared, open: url, options: [:])
}
...