[iOS] アプリからApp Storeを表示する方法について

2017.07.07

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

はじめに

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

本記事では、アプリからApp Storeを表示する方法を紹介します。

検証環境

  • macOS Sierra Version 10.12.5
  • Xcode Version 8.3.3
  • iPhone 6s, iOS 10.3.2

目次

  • アプリのURLやIDを取得する
  • App Storeを起動させる
  • アプリ内でApp Storeを表示する

アプリのURLやIDを取得する

「App Storeを起動させる」場合に必要なURLはiTunes Link Makerなどを使用して取得できます。

  • 例:TestFlightアプリのURL
    • https://itunes.apple.com/jp/app/apple-store/id899247664?mt=8

「アプリ内でApp Storeを表示する」場合に必要なIDはURLのパスに含まれる9桁の数字です。

  • 例:TestFlightアプリのID
    • 899247664

App Storeを起動させる

UIApplicationopen(_:options:completionHandler:)メソッドを使用すると、App Storeアプリ上で特定のアプリを表示できます。

@IBAction func launchButtonDidTap(_ sender: Any) {
    // TestFlightアプリのURL
    let url = URL(string: "https://itunes.apple.com/jp/app/apple-store/id899247664?mt=8")!

    // URLを開けるかをチェックする
    if UIApplication.shared.canOpenURL(url) {
        // URLを開く
        UIApplication.shared.open(url, options: [:]) { success in
            if success {
                print("Launching \(url) was successful")
            }
        }
    }
}

上記実装を実行すると、App Storeアプリが起動し、特定のアプリのページが表示されます。

アプリ内でApp Storeを表示する

StoreKitフレームワークのSKStoreProductViewControllerを使用すれば、アプリ内でAppStoreを表示できます。

import UIKit
import StoreKit

class ViewController: UIViewController {
    // SKStoreProductViewControllerを作成
    let storeProductViewController = SKStoreProductViewController()

    override func viewDidLoad() {
        super.viewDidLoad()

        // delegateを設定
        storeProductViewController.delegate = self
    }

    @IBAction func showButtonDidTap(_ sender: Any) {
        // パラメータ(アプリのID)を作成
        let parameters = [SKStoreProductParameterITunesItemIdentifier: 899247664]

        // アプリ情報をロードする
        storeProductViewController.loadProduct(withParameters: parameters) { status, error -> Void in
            if status {
                // SKStoreProductViewControllerを表示する
                self.present(self.storeProductViewController, animated: true, completion: nil)
            } else {
                if let error = error {
                    print("Error: \(error.localizedDescription)")
                }
            }
        }
    }
}

extension ViewController: SKStoreProductViewControllerDelegate {
    func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) {
        // SKStoreProductViewControllerを閉じる
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }
}

上記実装を実行すると、特定のアプリのページがモーダルで表示されます。

参考資料