WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

SKStoreProductViewControllerを試してみる

今回のエンジニアブログを担当させていただきます、山下です。
iOSで他のアプリのインストール画面へ導く便利なクラス、
SKStoreProductViewControllerについてご紹介します。

今までは以下のようにして、AppStoreへ切り替えを行っていました。

NSString *strURL = @"https://itunes.apple.com/jp/app/id574659842";  
NSURL *url = [NSURL URLWithString:strURL];  
[[UIApplication sharedApplication] openURL:url];  

iTunesのURLをopenURLしてあげるだけですね。実装は簡単です。
しかし前述したとおりAppStoreへ切り替わってしまうため、元のアプリに戻ってくるのは若干面倒。

storeproductvc

そこでiOS 6から、SKStoreProductViewControllerというクラスが追加されました。
これはStoreKit.frameworkに含まれています。
これを利用するとAppStoreの画面表示からインストールまで、現在のアプリ内で完結します。
元の画面へ戻るのも左上のキャンセルボタンを押すだけ。とってもユーザフレンドリー。

実装してみる

まずはTargetsにStoreKit.frameworkを追加します。

storekit

次にViewControllerのヘッダファイルでStoreKit.hのインポートとデリゲートの追加を行います。

#import <UIKit/UIKit.h>  
#import <StoreKit/StoreKit.h>  
  
@interface ViewController : UIViewController  
  
@end  

実際にSKStoreProductViewControllerを表示する実装は以下の通り。
SKStoreProductParameterITunesItemIdentifierでは表示させたいアイテムのIDを指定します。

    SKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init];  
    storeViewController.delegate = self;  
  
    [self presentViewController:storeViewController animated:YES completion:^() {  
        [storeViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier: @"574659842"}  
                                       completionBlock:^(BOOL result, NSError *error)  
        {  
            if (!result) {  
                NSLog(@"error");  
            }  
        }];  
    }];  

SKStoreProductViewControllerは、完了ボタンが押された時の挙動をデリゲート任せにします。
そのためproductViewControllerDidFinish:を実装し、SKStoreProductViewControllerを閉じる処理を書きます。

- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController  
{  
    [self dismissModalViewControllerAnimated:YES];  
}  

あと注意点がひとつ。
SKStoreProductViewControllerはリリースビルドでないと購入・インストールをさせてくれないようです。
AppStoreの画面は出せたとしても、インストールまで問題なく進めるかは開発段階では分かりません。
ちょっと不安が残りますが、実装も簡単に出来るため試してみる価値はあると思います!