この記事は公開されてから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)
}
}
上記実装を実行すると、特定のアプリのページがモーダルで表示されます。