这是有关使用Spotify iOS SDK的3部分系列的第2部分。 如果您错过了第一部分,请在 此处查看 。

当您拥有Spotify Premium帐户(对不起,Apple Music订户,但至少有MusicKit)时,Spotify SDK最有用。 因此,让我们登录您的用户。
因此,我们要做的第一件事就是使用在Spotify网站上注册应用程序时获得的数据来配置API。 获取您的客户端ID并从此处重定向URI。
创建一个新文件Constants.swift,以存储您的Spotify信息,因此您不必更改使用这些凭据的每个位置。
注意:您的重定向URI必须全部小写, 在此处 将URI的其他小写版本添加到Spotify的Application页面 。

现在不必花太多时间设计此屏幕,您只需使用一些东西即可与Spotify SDK交互。 现在,让我们转到SignInViewController.swift文件,在此我们将设置代码以验证用户身份。
我们可以通过两种方式对用户进行身份验证:通过应用程序或通过Web登录。由于用户无需再次登录Spotify,因此用户通过应用程序进行身份验证要容易得多,并且这减少了用户。 为了能够检查用户是否安装了Spotify应用,我们需要在Info.plist中添加几行。 右键单击您的Info.plist并将其作为源代码打开。

然后在之前插入以下代码:
现在我们可以实现Spotify登录了!
在用于您的登录按钮的@IBAction中,我们只需要打开应用程序(可以使用URL完成)或网站即可。
现在,您可以通过浏览器或网络成功登录,但您自己的应用程序中未通过身份验证。 我们需要能够从Spotify应用程序或网站信息进行回传,例如登录是否成功,应用程序需要完成登录的身份验证令牌,或者是否发生错误。
为此,我们必须检查Spotify应用或网站打开的网址以返回到我们的应用。 Spotify在此URL的末尾添加了额外的数据,以传达这些额外的数据。 幸运的是,Spotify SDK可以解析网址,并让我们在相对简单的界面中与其进行交互。
要查看打开应用程序的URL,我们在App Delegate中使用了一种便捷的方法来告诉我们该URL。
但是首先我们要确保我们可以在Spotify控制器中处理URL,因此身份验证逻辑的一部分未绑定到我们的App Delegate。 为此,我们将使用通知。
通知由NotificationCenter对象发布,您可以创建自己的通知。 这些消息将被广播,其他对象可以收听这些广播。 这将使我们能够从App Delegate向SignInViewController发送消息,而无需在两者之间创建强大的引用。
通知只不过是带有附加对象的广播字符串,因此就像我们永远不会改变的Spotify键一样,我还将为通知创建一个常量。 为了使事情真正井井有条,您可以扩展Notification.Name,这是您用于发布通知的特殊字符串类型。 下面的代码将允许我们使用Notification.Name.Speechify。来引用我们的通知名称。
现在,我们已经为通知创建了名称,我们只需要从应用程序代表获取URL。 Spotify为我们提供了一种方法,该方法将告诉我们获取的URL是否来自它们,因此我们要做的就是广播该URL,以便我们的SignInViewController可以获取它。
要在我们的SignInViewController中获取URL,我们必须设置一个观察者来监视通知。 在发布通知之前,我们需要确保已设置此观察者,因此请不要错过它。
因此,让我们回到SignInViewController并添加该观察者。
现在,您终于可以从Spotify播放音乐了! 但是,如果您尚未安装Spotify应用,则浏览器仍无法关闭,并且如果出现错误,您的用户将无法得知。
首先,请确保SignInViewController成功后将移至下一个屏幕,并且如果存在浏览器窗口,则将其关闭。
让我们创建用于成功登录和失败的方法。 如果登录有效,我们希望移至下一个视图控制器,但如果登录失败,则希望向用户显示错误消息。 因此,让我们将以下方法添加到我们的SignInViewController中。
因此,现在我们可以对其进行更改,以便authCallback出现错误时可以提醒用户。 我们还希望向SPTAudioStreamingController分配一个委托,以便它可以提醒我们有关用户的登录状态。
现在您可能会遇到一个错误,“无法将’SignInViewController’类型的值分配给’SPTAudioStreamingDelegate!’。”要解决此问题,我们只需要遵循SPTAudioStreamingDelegate协议即可。 我使用扩展名将委托方法与自己的委托方法分开,因此在文件末尾添加以下方法。
您现在已经成功登录了用户,现在可以开始流音乐了!
查看本系列的其他教程:
第1部分: Spotify iOS SDK入门
第3部分: Spotify iOS SDK流: 即将推出
有问题,建议或错误吗? 在Twitter上给我发消息。