Skip to content

Instantly share code, notes, and snippets.

@kkarayannis
Created October 2, 2019 11:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kkarayannis/65f8927ecc6444515c6525db72c7544a to your computer and use it in GitHub Desktop.
Save kkarayannis/65f8927ecc6444515c6525db72c7544a to your computer and use it in GitHub Desktop.
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate,
SPTAppRemoteDelegate {
static private let kAccessTokenKey = "access-token-key"
private let redirectUri = URL(string:"comspotifytestsdk://")!
private let clientIdentifier = "089d841ccc194c10a77afad9e1c11d54"
var window: UIWindow?
lazy var appRemote: SPTAppRemote = {
let configuration = SPTConfiguration(clientID: self.clientIdentifier, redirectURL: self.redirectUri)
let appRemote = SPTAppRemote(configuration: configuration, logLevel: .debug)
appRemote.connectionParameters.accessToken = self.accessToken
appRemote.delegate = self
return appRemote
}()
var accessToken = UserDefaults.standard.string(forKey: kAccessTokenKey) {
didSet {
let defaults = UserDefaults.standard
defaults.set(accessToken, forKey: SceneDelegate.kAccessTokenKey)
}
}
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
return
}
let parameters = appRemote.authorizationParameters(from: url);
if let access_token = parameters?[SPTAppRemoteAccessTokenKey] {
appRemote.connectionParameters.accessToken = access_token
self.accessToken = access_token
} else if let _ = parameters?[SPTAppRemoteErrorDescriptionKey] {
// Show the error
}
}
func sceneDidBecomeActive(_ scene: UIScene) {
connect();
}
func sceneWillResignActive(_ scene: UIScene) {
playerViewController.appRemoteDisconnect()
appRemote.disconnect()
}
func connect() {
playerViewController.appRemoteConnecting()
appRemote.connect()
}
// MARK: AppRemoteDelegate
func appRemoteDidEstablishConnection(_ appRemote: SPTAppRemote) {
self.appRemote = appRemote
playerViewController.appRemoteConnected()
}
func appRemote(_ appRemote: SPTAppRemote, didFailConnectionAttemptWithError error: Error?) {
print("didFailConnectionAttemptWithError")
playerViewController.appRemoteDisconnect()
}
func appRemote(_ appRemote: SPTAppRemote, didDisconnectWithError error: Error?) {
print("didDisconnectWithError")
playerViewController.appRemoteDisconnect()
}
var playerViewController: ViewController {
get {
let navController = self.window?.rootViewController?.children[0] as! UINavigationController
return navController.topViewController as! ViewController
}
}
}
@Erikjimenez314
Copy link

Does anyone know how to implement this on a specific view controller after everything is done on the Scene delegate?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment