Как посмотреть токен доступа при использовании диспетчера сеансов? - PullRequest
0 голосов
/ 02 мая 2020

Я использую API Spotify и следовал инструкциям по настройке iOS SDK. Это включало абстрагирование / делегирование большей части работы SPTSession / SPTSessionManager. Но теперь, когда все удалено, как я могу получить свой токен доступа, чтобы я мог выполнять «ручные» вызовы (используя классы URL, URLSession, URLRequest и т. Д. c в Swift)?

В инструкции по настройке я включил ленивый var sessionmanager (экземпляр SPTSessionManager), определенный с помощью closure, который управляет моим SPTSession, и я знаю, что в SPTSession есть члены access_token и refresh_token. Однако я не могу получить к ним доступ за пределами моего Appdelegate, потому что sessionmanager - это ленивая переменная в AppDelegate. Я попытался создать глобальные переменные для токенов вне appdelegate, но я не могу найти способ установить значения, так как sessionmanager полностью абстрагирован. Даже когда я нахожусь в AppDelegate, если я пытаюсь выполнить sessionmanager.session? закрытие просто переоценивает?

Я не уверен, что происходит. Кроме того, я не очень знаком с этикетом stackoverflow, поэтому, пожалуйста, дайте мне знать, если есть что-то, что я должен сделать по-другому!

class AppDelegate: UIResponder, UIApplicationDelegate, SPTSessionManagerDelegate {
    // Default appdelegate methods and other irrelevant code

    // implement session delegate
    func sessionManager(manager: SPTSessionManager, didInitiate session: SPTSession) {
        isLoggedIn = true
        authToken = session.accessToken
        refreshToken = session.refreshToken
        print("success", session)
    }

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

    func sessionManager(manager: SPTSessionManager, didRenew session: SPTSession) {
        authToken = session.accessToken
        print("renewed", session)
    }

    let SpotifyClientID = "b29fa2b4649e4bc697ecbf6721edaa39"

    let SpotifyRedirectURL = URL(string: "spotify-ios-quick-start://spotify-login-callback")!

    lazy var configuration = SPTConfiguration(
      clientID: SpotifyClientID,
      redirectURL: SpotifyRedirectURL
    )

    // Setup token swap via glitch
    lazy var sessionManager: SPTSessionManager = {

        if let tokenSwapURL = URL(string: "https://spotify-token-swap.glitch.me/api/token"),
        let tokenRefreshURL = URL(string: "https://spotify-token-swap.glitch.me/api/refresh_token") {
        self.configuration.tokenSwapURL = tokenSwapURL
        self.configuration.tokenRefreshURL = tokenRefreshURL
        self.configuration.playURI = ""
      }
      let manager = SPTSessionManager(configuration: self.configuration, delegate: self)
      return manager
    }()

    // Request to login with Spotify. Called from a different file.
    func requestSpotify() {
        let requestedScopes: SPTScope = [.userTopRead, .playlistModifyPublic]
        sessionManager.initiateSession(with: requestedScopes, options: .default)
    }

    // Configure auth callback
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
      self.sessionManager.application(app, open: url, options: options)
      return true
    }
}

Редактировать: Как отдельную проблему, я не могу открыть логин поток, потому что у меня есть «недопустимый клиент», хотя я занесен в белый список URI перенаправления и уверен, что мой идентификатор клиента правильный?

...