Я использую 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 перенаправления и уверен, что мой идентификатор клиента правильный?