使用RubyMotion搜索Apple Music(第2部分)

在第1部分中,我们添加了通过Apple Music播放歌曲的功能(希望您喜欢它!),但是曲目ID是硬编码的。 在本期中,我们将创建一个搜索界面,让您搜索自己要播放的音乐。

我们将从为搜索界面添加新的视图控制器开始。 使用此代码创建一个新文件search_controller.rb

  SearchController < UITableViewController 
def viewDidLoad


自我 .title = '搜索'
结束
结束

我们将从PlayerController创建SearchController的实例,然后在导航栏中添加一个按钮。 我们现在可以摆脱硬编码的曲目ID,因为我们将找到自己的曲目以尽快播放。

  def viewDidLoad 


@player = 玩家
@search_controller = SearchController

自我 .title = 'MusicApp'
自我 .view.backgroundColor = UIColor .whiteColor

自我addSubview create_play_button
自我 .navigationItem.rightBarButtonItem = create_search_button
结束
  def create_search_button 
@search_button = BW :: UIBarButtonItemnewsystem ::search
自我 .navigationController。 pushViewController@search_controller动画true
结束
结束

当用户点击搜索按钮时,我们的搜索控制器将被推到导航控制器的堆栈上。

现在在模拟器中尝试…

 耙模拟器 

…然后点击搜索按钮。

我们需要将SearchController绑定到Apple Music API上,以找到一些不错的音乐 Apple Music API是MusicKit的Web服务部分,但是在使用它之前,还有很多工作要做。 要使用Music API进行任何操作,您都需要开发者令牌。 这是你的制作方法。

开发者令牌

首先,您需要一个Music IDMusic Key 。 您可以从Apple Developer网站的“证书,标识符和配置文件”页面获得它们。

创建音乐ID

创建并下载MusicKit私钥 稍后您将需要密钥ID,因此请将其复制到某个地方。

现在,您终于可以创建一个开发人员令牌。 我不会为您提供所有详细信息,但是可以说这是一个JWT令牌,有效期为一个月。

创建JWT令牌的代码来自StackOverflow用户coreyward 。 您将需要两个gem来运行它。

  gem install jwt 
宝石安装openssl

这是创建令牌的代码。 输入您在先前步骤中创建的详细信息,然后在IRB中运行代码。

  需要 'jwt' 
需要 'openssl'

AppleMusic模块
令牌
attr_reader :key_id:team_id:keyfile

def 初始化key_idteam_idkeyfile
@key_id = key_id
@team_id = team_id
@keyfile = 密钥文件
结束

def auth_token
@auth_token || = fetch_auth_token
结束

def auth_header
“承载者 #{auth_token}
结束

受保护的

def fetch_auth_token
现在 = 时间 .now.to_i
一个月 = 3600 * 24 * 30
过期 = 现在 + 一个月

标头 = {
typ“ JWT”#必须指定; 不在文档中
alg“ ES256”
小子 :key_id
}

身体 = {
iss :team_id,
雅特现在
exp到期
}

JWT .encode( body ,auth_key, 'ES256'header
结束

def auth_key
密钥 = OpenSSL :: PKey :: EC新增 (keyfile.read)
.check_key

结束
结束
结束

team_id = '您的团队ID'
#在 https://developer.apple.com/membercenter/index.action上 找到它 #accountSummary
  music_private_key = '您的音乐私钥' 
#在 https://developer.apple.com/account/ios/authkey /中 找到它
  key_file = 'path_to_key_file.p8' 
#您先前下载的文件

令牌 = AppleMusic :: 令牌新的music_private_keyteam_idFile .open( key_file
放置令牌 .auth_token

将生成的令牌复制到安全的地方。 您很快就会需要它。

您无需将此代码添加到您的应用中; 我将其放在脚本文件夹中,以便当令牌在一个月后过期时可以重新运行它。 在真实的应用程序中,您可能希望在服务器上生成令牌,并让您的应用程序定期获取新令牌。

Apple文档中提供了有关开发人员令牌的更多信息。

搜索音乐

现在,我们可以使用开发人员令牌通过Apple Music API进行搜索。 有关搜索API的Apple文档在这里。 有很多搜索选项,但我们只是在寻找要播放的歌曲。

要使用API​​,我们将向我们的Gemfile添加一个新的gem,以使其更容易执行HTTP请求…

  来源 'https://rubygems.org' 

宝石 “耙子”
宝石 “气泡包装”
宝石 “情感”

…和…

  bundle install#安装gem 
rake pod:install#安装gem依赖的iOS库

…现在我们可以使用afmotion来获取一些曲目。

有多种使用afmotion的方法,但是我发现最简单的方法是在初始化中构建AFMotion :: Client ,然后为每个请求调整URL。