スマートフォン推進室で主にiOSアプリの開発を担当しています、富家です。
今日はiOS6で追加された
アプリ内でApp Storeへ誘導し、そのままアプリから離脱することなく購入できる
SKStoreProductViewControllerについて紹介します。
こういった感じです。↓

アプリ以外にも音楽、映画、ポッドキャストなど、App StoreやiTunesストアに並んでいるコンテンツを表示することができます。
早速実装の方を説明します。
SKStoreProductViewControllerはStoreKit.frameworkの中に存在するので
プロジェクトにStoreKit.frameworkを追加します。
次にコンテンツのIDを用意します。
IDはSmart App Bannerと同様iTunesからリンクをコピーした時のidから続く9桁の数字です。
Smart App Bannerについては以下
http://blog.excite.co.jp/spdev/18870453/
そしてコードを書きます。
NSDictionary *params = @{ SKStoreProductParameterITunesItemIdentifier : @(AppStoreID) };
SKStoreProductViewController *store = [[SKStoreProductViewController alloc] init];
store.delegate = self;
[store loadProductWithParameters:params completionBlock:^(BOOL result, NSError *error) {
if (!result) {
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self dismissViewControllerAnimated:YES
completion:nil];
});
}
}];
[self presentViewController:store animated:YES completion:nil];
AppStoreIDに表示したいIDが入っています。
NSDictionaryでパラメータを設定し
loadProductWithParameters:completionBlockを呼び出します。
completionBlock内でpresentViewControllerを呼び出すのが正規のやり方ですが、
このコードは先にpresentViewControllerで表示を先に行なってしまい、
IDが無効ならdismissを呼ぶという実装になっています。
最後にdelegateメソッドを実装しましょう
-(void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController
{
[self dismissViewControllerAnimated:YES
completion:^{
nil;
}];
}
左上のキャンセルなど押された時に呼ばれるデリゲートメソッドです。
ここで自分でdismissしないとストア画面が消えません。
たったこれだけでアプリ内からストアを表示することができるようになります。
注意点としては
StoreProductViewControllerはアフィリエイトなどの設定ができません。
(設定としてはあるようですがUndocumentedなので利用できません。)
また、デリゲートメソッドの
productViewControllerDidFinishは完了だけを通知するものであり、
アプリ内で購入したかというコンバージョン情報は一切取れないのも注意です。
iOS5の場合はSKStoreProductViewControllerが存在しないので、openURLでAppStoreに飛ばす
などの対応が必要になります。
しかしアプリ内から離脱せずにアプリ購入へ誘導できる点で非常に素晴らしいし、
アプリ内での自社アプリのプロモーションなどに利用すると素敵な感じになるかなと思います。
是非利用してみてください!