IAP helper for Apple in app purchases. It uses ARC and blocks for ease of use. Ready to use with newsstand subscriptions.
##Require
- StoreKit
- iOS 5 or later
- ARC
##How to use
- Add IAPHelper folder to your project.
- Add Storekit framework
pod 'IAPHelper'
if(![IAPShare sharedHelper].iap) { NSSet* dataSet = [[NSSet alloc] initWithObjects:@"com.comquas.iap.test", nil]; [IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet]; }
[IAPShare sharedHelper].iap.production = NO;
[[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response) { }];
[[IAPShare sharedHelper].iap buyProduct:product onCompletion:^(SKPaymentTransaction* trans){ }];
[[IAPShare sharedHelper].iap checkReceipt:trans.transactionReceipt AndSharedSecret:@"your sharesecret" onCompletion:^(NSString *response, NSError *error) { }];
[[IAPShare sharedHelper].iap checkReceipt:trans.transactionReceipt onCompletion:^(NSString *response, NSError *error) { }];
[[IAPShare sharedHelper].iap provideContentWithTransaction:transaction];
if([[IAPShare sharedHelper].iap isPurchasedProductsIdentifier:@"com.comquas.iap.test"] { // require saving product identifier first }
NSLog(@"%@",[IAPShare sharedHelper].iap.purchasedProducts);
[[IAPShare sharedHelper].iap clearSavedPurchasedProducts]; [[IAPShare sharedHelper].iap clearSavedPurchasedProductByID:@"com.myproduct.id"];
[[IAPShare sharedHelper].iap restoreProductsWithCompletion:^(SKPaymentQueue *payment, NSError *error) { //check with SKPaymentQueue // number of restore count int numberOfTransactions = payment.transactions.count; for (SKPaymentTransaction *transaction in payment.transactions) { NSString *purchased = transaction.payment.productIdentifier; if([purchased isEqualToString:@"com.myproductType.product"]) { //enable the prodcut here } } }];
if(![IAPShare sharedHelper].iap) { NSSet* dataSet = [[NSSet alloc] initWithObjects:@"com.comquas.iap.test", nil]; [IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet]; } [IAPShare sharedHelper].iap.production = NO; [[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response) { if(response > 0 ) { SKProduct* product =[[IAPShare sharedHelper].iap.products objectAtIndex:0]; [[IAPShare sharedHelper].iap buyProduct:product onCompletion:^(SKPaymentTransaction* trans){ if(trans.error) { NSLog(@"Fail %@",[trans.error localizedDescription]); } else if(trans.transactionState == SKPaymentTransactionStatePurchased) { [[IAPShare sharedHelper].iap checkReceipt:trans.transactionReceipt AndSharedSecret:@"your sharesecret" onCompletion:^(NSString *response, NSError *error) { //Convert JSON String to NSDictionary NSDictionary* rec = [IAPShare toJSON:response]; if([rec[@"status"] integerValue]==0) { [[IAPShare sharedHelper].iap provideContentWithTransaction:trans]; NSLog(@"SUCCESS %@",response); NSLog(@"Pruchases %@",[IAPShare sharedHelper].iap.purchasedProducts); } else { NSLog(@"Fail"); } }]; } else if(trans.transactionState == SKPaymentTransactionStateFailed) { NSLog(@"Fail"); } }];//end of buy product } }];