SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemote.h (65 lines of code) (raw):
#import <Foundation/Foundation.h>
@class SPTAppRemote;
@class SPTAppRemoteConnectionParams;
@class SPTConfiguration;
@protocol SPTAppRemoteImageAPI;
@protocol SPTAppRemotePlayerAPI;
@protocol SPTAppRemoteUserAPI;
@protocol SPTAppRemoteContentAPI;
@protocol SPTAppRemoteConnectivityAPI;
NS_ASSUME_NONNULL_BEGIN
extern NSString *const SPTAppRemoteAccessTokenKey;
extern NSString *const SPTAppRemoteErrorKey;
extern NSString *const SPTAppRemoteErrorDescriptionKey;
/// The severity of log messages that the App Remote should log to console.
typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) {
/// Do not log at all.
SPTAppRemoteLogLevelNone = 0,
/// Log debug, info and error messages.
SPTAppRemoteLogLevelDebug = 1,
/// Log info and error messages.
SPTAppRemoteLogLevelInfo = 2,
/// Log only error messages.
SPTAppRemoteLogLevelError = 3,
};
/**
* The `SPTAppRemoteDelegate` receives updates from the `SPTAppRemote` whenever something has
* happened with the connection.
*/
@protocol SPTAppRemoteDelegate <NSObject>
/**
* Called when the App Remote has established connection with the Spotify app.
*
* @param appRemote The transport that has connected.
*/
- (void)appRemoteDidEstablishConnection:(SPTAppRemote *)appRemote;
/**
* Called when the connection attempt made by the App Remote failed.
*
* @param appRemote The App Remote that failed to connect.
* @param error The error that occurred.
*/
- (void)appRemote:(SPTAppRemote *)appRemote didFailConnectionAttemptWithError:(nullable NSError *)error;
/**
* Called when the App Remote has disconnected.
*
* @note All APIs will be released by the App Remote at this point. The will no longer be usable,
* and so you should release them as well.
*
* @param appRemote The App Remote that disconnected.
* @param error The error that caused the disconnect, or `nil` if the disconnect was explicit.
*/
- (void)appRemote:(SPTAppRemote *)appRemote didDisconnectWithError:(nullable NSError *)error;
@end
/**
* The `SPTAppRemote` is the main entry point for interacting with the Spotify app using the Spotify App Remote for
* iOS.
*/
@interface SPTAppRemote : NSObject
#pragma mark Lifecycle
/**
* Convenience Initializer for a new App Remote instance
*
* @param configuration The `SPTConfiguration` to use for client-id's and redirect URLs
* @param logLevel The lowest severity to log to console.
*
* @return A fresh new App Remote, ready to connect.
*/
- (instancetype)initWithConfiguration:(SPTConfiguration *)configuration logLevel:(SPTAppRemoteLogLevel)logLevel;
/**
* Designated Initializer for a new App Remote instance
*
* @param configuration The `SPTConfiguration` to use for client-id's and redirect URLs
* @param connectionParameters `SPTAppRemoteConnectionParams` for custom image sizes and types, and to hold the
* accessToken
* @param logLevel The lowest severity to log to console.
*
* @return A fresh new App Remote, ready to connect.
*/
- (instancetype)initWithConfiguration:(SPTConfiguration *)configuration
connectionParameters:(SPTAppRemoteConnectionParams *)connectionParameters
logLevel:(SPTAppRemoteLogLevel)logLevel NS_DESIGNATED_INITIALIZER;
#pragma mark Class Methods
/**
* Determine the current version of the Spotify App Remote
*
* @return The current version of the Spotify App Remote
*/
+ (NSString *)appRemoteVersion;
/**
* The Spotify app iTunes item identifier for use with `SKStoreProductViewController` for installing Spotify from the
* App Store.
*
* @return An `NSNumber` representing the Spotify iTunes item identifier to be used for the
* `SKStoreProductParameterITunesItemIdentifier` key
*/
+ (NSNumber *)spotifyItunesItemIdentifier;
#pragma mark Connection
/**
* The parameters to use during connection.
*/
@property (nonatomic, strong, readonly) SPTAppRemoteConnectionParams *connectionParameters;
/**
* `YES` if the App Remote is connected to the Spotify application, otherwise `NO`.
*
* @note Not KVO’able.
*
* See The `SPTAppRemoteDelegate` in order to receive updates when the connection status changes.
*/
@property (nonatomic, assign, readonly, getter=isConnected) BOOL connected;
/**
* The delegate to notify for connection status changes and other events originating from the App Remote.
*/
@property (nonatomic, weak) id<SPTAppRemoteDelegate> delegate;
/**
* Attempts to connect to the Spotify application.
*
* @discussion If the Spotify app is not running you will need to use authorizeAndPlayURI: to wake it up
*/
- (void)connect;
/**
* Attempts to connect to the Spotify application with a given session identifier.
*
* @discussion If the Spotify app is not running you will need to use authorizeAndPlayURI: to wake it up.
*
* @discussion If `authorizeAndPlayURI` was used without a given session identifier, `connect` should be used instead of
* this method.
*
* @param sessionIdentifier The unique session identifier which was used when calling
* `authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:`
*/
- (void)connectWithSessionIdentifier:(NSUUID *)sessionIdentifier;
/**
* Disconnect from the Spotify application
*/
- (void)disconnect;
/**
* Open Spotify app to obtain access token and start playback.
* The passed URI will start playing unless Spotify is already playing.
*
* @param URI The URI to play. Use a blank string to attempt to play the user's last song
* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise
* `NO`.
*
* Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if
* the Spotify app is installed and can attempt to handle the authorization request.
*/
- (void)authorizeAndPlayURI:(NSString *)URI completionHandler:(void (^__nullable)(BOOL success))completionHandler;
/**
* Open Spotify app to obtain access token and start playback.
*
* @param playURI The URI to play. Use a blank string to attempt to play the user's last song
* @param asRadio `YES` to start radio for the given URI.
* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise
* `NO`.
*
* Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if
* the Spotify app is installed and can attempt to handle the authorization request.
*/
- (void)authorizeAndPlayURI:(NSString *)playURI
asRadio:(BOOL)asRadio
completionHandler:(void (^__nullable)(BOOL success))completionHandler;
/**
* Open Spotify app to obtain access token and start playback.
*
* @param playURI The URI to play. Use a blank string to attempt to play the user's last song
* @param asRadio `YES` to start radio for the given URI.
* @param additionalScopes An array of scopes in addition to `app-remote-control`. Can be nil if you only need
* `app-remote-control`
* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise
* `NO`.
*
* Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if
* the Spotify app is installed and can attempt to handle the authorization request.
*/
- (void)authorizeAndPlayURI:(NSString *)playURI
asRadio:(BOOL)asRadio
additionalScopes:(nullable NSArray<NSString *> *)additionalScopes
completionHandler:(void (^__nullable)(BOOL success))completionHandler;
/**
* Open Spotify app to obtain access token and start playback.
*
* @param playURI The URI to play. Use a blank string to attempt to play the user's last song
* @param asRadio `YES` to start radio for the given URI.
* @param additionalScopes An array of scopes in addition to `app-remote-control`. Can be nil if you only need
* `app-remote-control`
* @param sessionIdentifier An optional unique identifier for this specific session, which is used for analytics
* purposes. Every new attempt to connect to the Spotify app should have a new identifier, but the identifier used here
* should then be reused for the accompanied call to `connectWithSessionIdentifier:`.
* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise
* `NO`.
*
* Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if
* the Spotify app is installed and can attempt to handle the authorization request.
*/
- (void)authorizeAndPlayURI:(NSString *)playURI
asRadio:(BOOL)asRadio
additionalScopes:(nullable NSArray<NSString *> *)additionalScopes
sessionIdentifier:(nullable NSUUID *)sessionIdentifier
completionHandler:(void (^__nullable)(BOOL success))completionHandler;
/**
* Parse out an access token or error description from a url passed to application:openURL:options:
*
* @param url The URL returned from the Spotify app after calling authorizeAndPlayURI
*
* @return A dictionary containing the access token or error description from the provided URL.
* Will return nil if the URL Scheme does not match the redirect URI provided.
* Use `SPTAppRemoteAccessTokenKey` and `SPTAppRemoteErrorDescriptionKey` to get the appropriate values.
*/
- (nullable NSDictionary<NSString *, NSString *> *)authorizationParametersFromURL:(NSURL *)url;
#pragma mark APIs
/**
* The API used to control the Spotify player.
*
* @note Will only be populated when the App Remote is connected. If you retain this object you must release it on
* disconnect.
*/
@property (nullable, nonatomic, strong, readonly) id<SPTAppRemotePlayerAPI> playerAPI;
/**
* The API used to fetch images from the Spotify app.
*
* @note Will only be populated when the App Remote is connected. If you retain this object you must release it on
* disconnect.
*/
@property (nullable, nonatomic, strong, readonly) id<SPTAppRemoteImageAPI> imageAPI;
/**
* The API used to fetch user data from the Spotify app.
*
* @note Will only be populated when the App Remote is connected. If you retain this object you must release it on
* disconnect.
*/
@property (nullable, nonatomic, strong, readonly) id<SPTAppRemoteUserAPI> userAPI;
/**
* The API used to fetch content from the Spotify app.
*
* @note Will only be populated when the App Remote is connected. If you retain this object you must release it on
* disconnect.
*/
@property (nullable, nonatomic, strong, readonly) id<SPTAppRemoteContentAPI> contentAPI;
/**
* The API used to get connectivity data from the Spotify app.
*
* @note Will only be populated when the App Remote is connected. If you retain this object you must release it on
* disconnect.
*/
@property (nullable, nonatomic, strong, readonly) id<SPTAppRemoteConnectivityAPI> connectivityAPI;
#pragma mark Unavailable initializers
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END