![[iOS] アプリからApp Storeを表示する方法について](https://devio2023-media.developers.io/wp-content/uploads/2015/12/ios.png)
[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を起動させる
UIApplicationのopen(_: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)
    }
}
上記実装を実行すると、特定のアプリのページがモーダルで表示されます。















