アプリ内でAppStoreの画面を表示する方法をまとめました。
URLスキームでAppStoreアプリを開くのではなく、アプリ内でAppStoreのアプリページを表示する方法です。
他のアプリを紹介したいときに使えます。
iOS6以上のアプリで使用可能です。
#アプリのIDの調べ方
iTunesStoreで表示したいアプリのページを表示して、タイトルの部分をコピーするとURLがコピーできます。
例:https://itunes.apple.com/jp/app/doragonkuesutomonsutazu-suparaito/id710247888?mt=8
idから?mt=8までの値である710247888がアプリのIDです。
#StoreKit.frameworkの登録
StoreKitフレームワークを登録します。
プロジェクトのTARGETS→Build Phase→Link Binary With Libraryの画面を開き、
+ボタンをタップしてStoreKit.frameworkを選択してください。
#サンプルコード
画面を開いたときにAppStoreの画面を表示するサンプルコードです。
###Objective-C
#import "ViewController.h"
#import <StoreKit/StoreKit.h>
@interface ViewController () <SKStoreProductViewControllerDelegate>
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self showSKStoreProductViewController];
}
// アプリ内AppStore画面を表示するメソッド
- (void)showSKStoreProductViewController {
SKStoreProductViewController *productViewController = [[SKStoreProductViewController alloc] init];
productViewController.delegate = self;
[self presentViewController:productViewController animated:YES completion:^() {
NSString *productID = @"710247888"; // 調べたアプリのID
NSDictionary *parameters = @{SKStoreProductParameterITunesItemIdentifier:productID};
[productViewController loadProductWithParameters:parameters
completionBlock:^(BOOL result, NSError *error)
{
// 読み込み完了またはエラーのときの処理
// ...
}];
}];
}
// キャンセルボタンが押されたときの処理
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
###Swift
import UIKit
import StoreKit
class ViewController: UIViewController, SKStoreProductViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
showSKStoreViewController()
}
func showSKStoreViewController() {
let productViewController = SKStoreProductViewController()
productViewController.delegate = self
presentViewController( productViewController, animated: true, completion: {() -> Void in
let productID = "710247888" // 調べたアプリのID
let parameters:Dictionary = [SKStoreProductParameterITunesItemIdentifier: productID]
productViewController.loadProductWithParameters( parameters, completionBlock: {(Bool, NSError) -> Void in
// 読み込み完了またはエラーのときの処理
// ...
})
})
}
// キャンセルボタンが押された時の処理
func productViewControllerDidFinish(viewController: SKStoreProductViewController!) {
dismissViewControllerAnimated( true, completion: nil);
}
}
#裏ワザ:デベロッパーのアプリ一覧を表示する
IDにアプリのIDではなく、デベロッパーのIDを登録することでアプリ一覧を表示することができます。
###注意
しかし、この方法ではFreeやOPENのボタンを押してアプリをインストールすることはできますが、
各アプリのセルをタップしてアプリの画面に遷移できなかったり、フリーズしたり、アプリが落ちたりします。
(iOS7以上。iPhone,iPadどちらもNG。)