今回のエンジニアブログを担当させていただきます、山下です。
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へ切り替わってしまうため、元のアプリに戻ってくるのは若干面倒。
そこでiOS 6から、SKStoreProductViewControllerというクラスが追加されました。
これはStoreKit.frameworkに含まれています。
これを利用するとAppStoreの画面表示からインストールまで、現在のアプリ内で完結します。
元の画面へ戻るのも左上のキャンセルボタンを押すだけ。とってもユーザフレンドリー。
実装してみる
まずはTargetsにStoreKit.frameworkを追加します。
次に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の画面は出せたとしても、インストールまで問題なく進めるかは開発段階では分かりません。
ちょっと不安が残りますが、実装も簡単に出来るため試してみる価値はあると思います!