[iOS]アプリ内課金(プロダクト情報の取得) | Cocoa練習帳

[iOS]アプリ内課金(プロダクト情報の取得)

アプリ内課金は、暫くは使わないだろうと考え後回しにしていたのだが、避ける事が出来なくなったようだ。




Store Kitフレームワークを使ったIn-App Purchaseの何が面倒かというと、環境を用意するところだと思う。




今回はサンプル・コードは用意できていない。なぜなら、登録の都合上、弊社の開発中のアプリケーションとしてアプリケーションを制作したからだ。申し訳ない。




iOS Provisioning Portalで、App IDを登録する。




iTunes ConnectのManage Your Applicationsで、アプリケーションを追加する。

Manage In-App Purchasesでプロダクトを追加する。




XcodeのiOSアプリケーションのプロジェクトを生成して、StoreKit.frameworkを追加し、StoreKit/StoreKit.hをimportする。




SKRequestDelegateとSKProductsRequestDelegateの2つのプロトコルに対応させる。




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



アプリ内課金に対応しているか確認し、指定したプロダクトIDの情報を取得する。




- (void)viewDidLoad
{
    [super viewDidLoad];
    
    if ([SKPaymentQueue canMakePayments]) {
        NSLog(@"ユーザにStoreを表示する");
        [self requestProductData];
    }
    else {
        NSLog(@"購入できないことをユーザに警告する");
    }
}



プロダクトIDの情報取得を要求し、結果を受け取るメソッドは以下のとおり。




- (void)requestProductData
{
    SKProductsRequest *request= [[SKProductsRequest alloc]
                                 initWithProductIdentifiers:
                                 [NSSet setWithObject:<プロダクトID>]];
    request.delegate = self;
    [request start];
}
 
- (void)productsRequest:(SKProductsRequest *)request
     didReceiveResponse:(SKProductsResponse *)response
{
    NSArray *myProduct = response.products;
    NSLog(@"%@", myProduct);
    SKProduct   *skp = [myProduct objectAtIndex:0U];
    NSLog(@"%@", skp.localizedDescription);
}



準備は面倒だが、この程度なら、あっけなく動いた。




関連情報
In App Purchase プログラミングガイド