74
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アプリ内でAppStoreを表示する方法

Posted at

アプリ内でAppStoreの画面を表示する方法をまとめました。
URLスキームでAppStoreアプリを開くのではなく、アプリ内でAppStoreのアプリページを表示する方法です。
他のアプリを紹介したいときに使えます。
iOS6以上のアプリで使用可能です。

product.jpg

#アプリの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を選択してください。

skstorekit.jpg

#サンプルコード

画面を開いたときにAppStoreの画面を表示するサンプルコードです。

###Objective-C

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

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を登録することでアプリ一覧を表示することができます。

developer.jpg

###注意
しかし、この方法ではFreeやOPENのボタンを押してアプリをインストールすることはできますが、
各アプリのセルをタップしてアプリの画面に遷移できなかったり、フリーズしたり、アプリが落ちたりします。
(iOS7以上。iPhone,iPadどちらもNG。)

74
69
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
74
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?