iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
アプリ内課金は、暫くは使わないだろうと考え後回しにしていたのだが、避ける事が出来なくなったようだ。
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);
}
準備は面倒だが、この程度なら、あっけなく動いた。