[iOS 10] Apple Music の登録画面等を表示するための SKCloudServiceSetupViewController について
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では iOS 10.1 で StoreKit に追加された SKCloudServiceSetupViewController の使用方法を紹介していきます。SKCloudServiceSetupViewController は Apple Music の登録画面等を表示するための ViewController です。
検証環境
- Xcode Version 8.1 (8B62)
- iPhone 6s, iOS 10.1.1
SKCloudServiceSetupViewController を使用できるかを確認する
さっそく実装を紹介していきます。
import UIKit import StoreKit class ViewController: UIViewController { let cloudServiceController = SKCloudServiceController() override func viewDidLoad() { super.viewDidLoad() // [1] ミュージックライブラリへのアクセス許可を要求する SKCloudServiceController.requestAuthorization { (status) in if status != .authorized { return } // [2] 利用可能な機能を確認する // 以下を満たす場合、SKCloudServiceSetupViewController を使用できる // .musicCatalogSubscriptionEligible が含まれている // .musicCatalogPlayback が含まれていない self.cloudServiceController.requestCapabilities { (capability, error) in if capability.contains(.musicCatalogSubscriptionEligible) && !capability.contains(.musicCatalogPlayback) { print("you can use SKCloudServiceSetupViewController") } } } } // ... }
[1] ミュージックライブラリへのアクセス許可を要求する
SKCloudServiceSetupViewController を使用できるかを確認する処理自体は手順 [2] で行いますが、手順 [2] を行うには、ミュージックライブラリへのアクセス許可を得る必要があります。
SKCloudServiceController
クラスの requestAuthorization(_:)
メソッドを使用して許可を要求します。
[2] 利用可能な機能を確認する
requestCapabilities(completionHandler:)
メソッドを使用して利用可能な機能を確認します。
capability が以下を満たす場合、SKCloudServiceSetupViewController を使用できます。
.musicCatalogSubscriptionEligible
が含まれている.musicCatalogPlayback
が含まれていない
SKCloudServiceSetupViewController を表示する
class ViewController: UIViewController { // ... @IBAction func buttonDidTap(_ sender: Any) { let controller = SKCloudServiceSetupViewController() // ビューをロードする // options に action キーと値 subscribe を指定 controller.load(options: [.action : SKCloudServiceSetupAction.subscribe], completionHandler: { (result, error) in // ... }) present(controller, animated: true, completion: nil) } }
SKCloudServiceSetupViewController
を作成し、load(options:completionHandler:)
メソッドを呼べば登録画面が準備されます。
present(_:animated:completion:)
メソッドを使用すると以下の画面が表示されました。
登録画面に特定のアイテムを表示する
@IBAction func buttonDidTap(_ sender: Any) { // ... let options: [SKCloudServiceSetupOptionsKey : Any] = [.action : SKCloudServiceSetupAction.subscribe, .iTunesItemIdentifier : 1069277704 as NSNumber] // iTunesItemIdentifier を指定 controller.load(options: options, completionHandler: { (result, error) in // ... }) // ... }
上記実装のように load(options:completionHandler:)
メソッドの options
引数のディクショナリ内に .iTunesItemIdentifier
キーと iTunes Store Item ID を含めた場合、登録画面の内容は以下のようになりました。iTunes Store Item ID は「曲」「ビデオ」「プレイリスト」「アルバム」の iTunes Store 上の Item ID です。Apple Music 未登録のユーザーが Apple Music のアイテムを再生しようとした場合などにこのオプションを指定すれば良さそうです。
iTunes Store Item ID の取得方法
iTunes Store Item ID は Apple が提供している「iTunes Search API」を使用して取得することができます。iTunes Search API の使用例については以下の記事で解説していますのであわせてご覧ください。
さいごに
本記事では iOS 10.1 で StoreKit に追加された SKCloudServiceSetupViewController の使用方法を紹介しました。ミュージックライブラリの曲の再生などを行うアプリなどで役に立ちそうですね。
今回紹介したサンプルのソースコードは以下のリポジトリで公開してますので参考にしてみてください。
参考資料
- StoreKit Changes for Swift
- SKCloudServiceController - StoreKit
- SKCloudServiceSetupViewController - StoreKit
- SKCloudServiceCapability - StoreKit
- Technical Q&A QA1929: Using SKCloudServiceController to determine your device's music library capabilities
- OptionSet - Swift Standard Library
- [iOS] iOS 9.3 の新機能を使用して Apple Music の曲の再生とライブラリへの追加を行う | Developers.IO