如何使用SpotifyiOS框架实现应用授权且不自动播放歌曲
Spotify iOS SDK授权不自动播放的实现方法
核心原因
SPTAppRemote的authorizeAndPlayURI(_:)方法本身是为「授权后立即播放指定内容」的场景设计的,哪怕传入空字符串,SDK也会默认续播用户上次播放的内容,所以纯授权场景不要使用该方法。
正确实现步骤
- 单独使用
SPTSessionManager走OAuth授权流程,不需要绑定SPTAppRemote的播放逻辑,代码示例如下:
// 1. 初始化SDK配置 let sdkConfig = SPTConfiguration( clientID: "你的应用ClientID", redirectURL: URL(string: "你的应用重定向URI")! ) // 2. 初始化会话管理器并设置代理 let sessionManager = SPTSessionManager( configuration: sdkConfig, delegate: self ) // 3. 发起授权申请,按需传入需要的权限范围 let requiredScopes: SPTScope = [.appRemoteControl, .userReadPlaybackState, .userModifyPlaybackState] sessionManager.initiateSession(with: requiredScopes, options: .clientOnly)
- 实现
SPTSessionManagerDelegate代理方法,拿到授权凭证后按需使用:
// 授权成功回调 func sessionManager(_ manager: SPTSessionManager, didInitiate session: SPTSession) { // 存储授权会话或者直接使用accessToken // 如果需要连接SPTAppRemote,直接调用connect方法即可,不会触发自动播放 appRemote.connectionParameters.accessToken = session.accessToken appRemote.connect() } // 授权失败回调 func sessionManager(_ manager: SPTSessionManager, didFailWith error: Error) { // 处理授权失败逻辑 }
特殊场景兼容
如果业务逻辑必须使用SPTAppRemote的授权方法,可以在授权成功回调中立即调用暂停接口:
appRemote.authorizeAndPlayURI("") // 授权成功连接后立即暂停 func appRemoteDidEstablishConnection(_ appRemote: SPTAppRemote) { appRemote.playerAPI?.pause() }
该方案会出现极短时间的播放声,优先推荐使用独立会话授权的方案。
内容的提问来源于stack exchange,提问作者mobs_boss
相关产品推荐
相关产品推荐

