警告:这是Spotify iOS SDK的一个测试版。
欢迎来到Spotify iOS SDK!本Readme是为希望开发包含音频流、播放列表操作、搜索等功能的应用程序的开发者编写的。
使用此SDK受限于开发者使用条款。
我们提前发布此SDK是为了从开发社区获取关于我们iOS SDK未来的反馈。请在我们的问题跟踪器提交反馈关于缺失的问题或错误,确保您搜索现有的问题,并为这些问题添加声音,而不是重复。
有关已知问题和对发布说明的详细信息,请参阅CHANGELOG.md文件。
Spotify iOS SDK需要iOS 7或更高版本的部署目标。以下架构受到支持:对设备的armv7
、armv7s
和arm64
,对iOS模拟器的i386
和x86_64
。不能使用i386
和x86_64
构建Mac应用程序。
将Spotify iOS SDK添加到您的应用程序中很简单
Spotify.framework
库添加到您的Xcode项目中。-ObjC
标志添加到项目中“其他链接器标志”的构建设置中。AVFoundation.framework
添加到项目的“链接二进制与库”的构建阶段。#import <Spotify/Spotify.h>
!库的头文件有详尽的文档,并附带一个由Xcode本身以及类似Dash的应用程序可以索引的Xcode文档集。这,加上包含的演示项目,应该为您提供了一切所需,以开始开发。使您能迅速入门的类包括
SPTAuth
包含用户认证的方法。有关此功能的示例,请参阅“基本认证”演示项目。请务必阅读下列的“认证和范围”和“会话寿命”部分,因为认证相当复杂。
注意:要执行音频播放,您在使用 SPTAuth
时必须请求 SPTAuthStreamingScope
权限。为此,请将包含常量的数组传递给 -loginURLForClientId:declaredRedirectURL:scopes:
。如果需要,已提供的演示项目已经完成了这一操作。
SPTRequest
包含搜索、获取播放列表和执行元数据查找的方法。大多数元数据类(如 SPTTrack
、SPTArtist
、SPTAlbum
等)也包含便捷方法。
您可以在 Spotify 开发者网站的 我的应用程序 部分生成您应用程序的 Client ID、Client Secret 并定义您的回调 URI。之前 SDK 版本提供的临时密钥将不会在 Beta 3 及更高版本中工作。
当将用户连接到您的应用程序时,您必须提供应用程序操作所需的权限。权限是访问用户账户特定部分的权限,如果不请求所需的权限,则在尝试执行各种任务时将收到拒绝权限的错误。
您不需要权限来访问非用户特定信息,如执行搜索、查找元数据等。
常见的权限包括
SPTAuthStreamingScope
允许 Premium 用户进行音乐流媒体播放。
SPTAuthUserReadPrivateScope
允许访问用户的私人信息,例如全显示名称、用户照片等。
SPTAuthPlaylistReadScope
和 SPTAuthPlaylistReadPrivateScope
允许分别访问用户的公开和私人播放列表。
SPTAuthPlaylistModifyScope
和 SPTAuthPlaylistModifyPrivateScope
允许分别修改用户的公开和私人播放列表。
权限的完整列表可在文档和 SPTAuth.h
中找到。
如果用户已连接到您的应用程序后,您应用程序的权限发生变化,您需要删除存储的凭证,并以新权限重新验证用户。
重要:仅请求您应用程序需要的权限。例如,当您的应用程序不使用播放列表时请求播放列表访问是不良的做法。
您的用户进行身份验证后,您将收到一个 SPTSession
对象,该对象允许您执行受保护请求。此会话仅在一段时间内有效,必须进行刷新。
通过调用 SPTSession
上的 -isValid
方法和使用 expirationDate
属性,您可以找到会话是否仍然有效。一旦会话无效,您就可以使用 SPTAuth
的 -renewSession:withServiceEndpointAtURL:callback:
方法更新它。
例如,当您的应用程序启动时,您将想要恢复存储的会话,然后检查其有效性并在必要时更新它。您的代码流程可能如下所示
SPTSession *session = …; // Restore session
if (session == nil) {
// No session at all - use SPTAuth to ask the user
// for access to their account.
[self presentFirstTimeLoginToUser];
} else if ([session isValid]) {
// Our session is valid - go straight to music playback.
[self playMusicWithSession:session];
} else {
// Session expired - we need to refresh it before continuing.
// This process doesn't involve user interaction unless it fails.
NSURL *refreshServiceEndpoint = …;
[[SPTAuth defaultInstance] renewSession:session
withServiceEndpointAtURL:refreshServiceEndpoint
callback:^(NSError *error, SPTSession *session)
{
if (error == nil) {
[self playMusicWithSession:session];
} else {
[self handleError:error];
}
}];
}
CocoaLibSpotify 是基于 libspotify 库的,该库包含大量遗留代码,是一个非常复杂的库。虽然这提供了一些功能,但它也会消耗大量的 RAM 和 CPU 资源,这并不适合移动平台。
Spotify iOS SDK 基于完全新的技术堆栈,旨在避免这些问题,同时仍然提供丰富的功能集。由于这种新的体系结构,我们做出了从头开始使用 Spotify iOS SDK API 的决定,而不是尝试将新技术塞入 CocoaLibSpotify 的 API。这导致了一个更易于使用且与 CocoaLibSpotify 相比具有极小 CPU 和 RAM 足迹的库。
Spotify iOS API 与 CocoaLibSpotify 不具备完全相同的1:1功能一致性。它包含CocoaLibSpotify不具备的功能,同时CocoaLibSpotify也有Spotify iOS SDK不具备的功能。我们正在努力缩小这一差距,如果您认为Spotify iOS SDK缺少某个特别重要的功能,请与我们联系,以便我们正确确定优先级。
由于CocoaLibSpotify与Spotify iOS SDK的API和功能差异,我们理解迁移可能困难。因此,CocoaLibSpotify将在该SDK退出测试阶段后仍可用一段时间。