Blocksで書けるのはなかなかいい。
Product Requests はこんな感じで書ける。
NSArray *identifiers = @[ @"com.example.myapp.apple", @"com.example.myapp.pear", @"com.example.myapp.banana" ]; [[CargoBay sharedManager] productsWithIdentifiers:[NSSet setWithArray:identifiers] success:^(NSArray *products, NSArray *invalidIdentifiers) { NSLog(@"Products: %@", products); NSLog(@"Invalid Identifiers: %@", invalidIdentifiers); } failure:^(NSError *error) { NSLog(@"Error: %@", error); }];
Payment Queue(トランザクション処理)も同様に Blocksで書ける。
- (void)application:(UIApplication *)application didFinishLoadingWithOptions:(NSDictionary *)options { [[CargoBay sharedManager] setPaymentQueueUpdatedTransactionsBlock:^(SKPaymentQueue *queue, NSArray *transactions) { NSLog(@"Updated Transactions: %@", transactions); }]; [[SKPaymentQueue defaultQueue] addTransactionObserver:[CargoBay sharedManager]]; // ... }
レシートの確認処理用に外部のライブラリ AFNetworkingを利用している。
なお Security.frameworkを組み込むとレシート確認ではiTSの証明書検証を独自に行うようになるだ
(CBCheckReceiptSecurity関数)。アプリ内課金は未経験なのでよくわからないのだがここまでやる必要があるのか?(あるとしたら書くのは面倒なのでこのライブラリはかなり便利)。
- - - -
なお余談だが CargoBay.m 内にあったBase64デコード関数 CBDataFromBase64EncodedString は配列を使ったもので面白かった。出典はCocoa with Loveだった↓