[iOS] アプリからApp Storeを表示する方法について
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では、アプリから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) } }
上記実装を実行すると、特定のアプリのページがモーダルで表示されます。