[iOS 10] Apple Music の登録画面等を表示するための SKCloudServiceSetupViewController について

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

本記事では 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:) メソッドを使用すると以下の画面が表示されました。

ios-10-cloudservice-setup-viewcontroller-1

登録画面に特定のアイテムを表示する

@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 のアイテムを再生しようとした場合などにこのオプションを指定すれば良さそうです。

ios-10-cloudservice-setup-viewcontroller-2

iTunes Store Item ID の取得方法

iTunes Store Item ID は Apple が提供している「iTunes Search API」を使用して取得することができます。iTunes Search API の使用例については以下の記事で解説していますのであわせてご覧ください。

[iOS] iOS 9.3 の新機能を使用して Apple Music の曲の再生とライブラリへの追加を行う

さいごに

本記事では iOS 10.1 で StoreKit に追加された SKCloudServiceSetupViewController の使用方法を紹介しました。ミュージックライブラリの曲の再生などを行うアプリなどで役に立ちそうですね。

今回紹介したサンプルのソースコードは以下のリポジトリで公開してますので参考にしてみてください。

参考資料