Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/saturngod/iaphelper
No more maintenance for this repo. Please use the https://github.com/bizz84/SwiftyStoreKit
https://github.com/saturngod/iaphelper
Last synced: about 9 hours ago
JSON representation
No more maintenance for this repo. Please use the https://github.com/bizz84/SwiftyStoreKit
- Host: GitHub
- URL: https://github.com/saturngod/iaphelper
- Owner: saturngod
- License: mit
- Created: 2012-07-10T07:56:59.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2020-10-31T15:00:07.000Z (about 4 years ago)
- Last Synced: 2024-12-21T07:03:36.480Z (7 days ago)
- Language: Objective-C
- Homepage:
- Size: 56.6 KB
- Stars: 1,555
- Watchers: 62
- Forks: 279
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
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**### Cocoapod
```
pod 'IAPHelper'
```### Initialize
```objc
if(![IAPShare sharedHelper].iap) {NSSet* dataSet = [[NSSet alloc] initWithObjects:@"com.comquas.iap.test", nil];
[IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet];
}
```### Production Mode On/Off
```objc
[IAPShare sharedHelper].iap.production = NO;
```### Request Products
```objc
[[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response)
{}];
```### Get Locale Price and Title
```objc
SKProduct* product =[[IAPShare sharedHelper].iap.products objectAtIndex:0];NSLog(@"Price: %@",[[IAPShare sharedHelper].iap getLocalePrice:product]);
NSLog(@"Title: %@",product.localizedTitle);
```### Purchase
```objc
[[IAPShare sharedHelper].iap buyProduct:product
onCompletion:^(SKPaymentTransaction* trans){
}];
```### Check Receipt with shared secret
For checking receipt , recommend to use only for server side. I am not recommend to use from client side directly check it. However, sometime we want to use only on client side for some reason. Use with your own risk.
Please check [Apple guide ](https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW2).
```objc
[[IAPShare sharedHelper].iap checkReceipt:[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] AndSharedSecret:@"your sharesecret" onCompletion:^(NSString *response, NSError *error) {}];
```### Check Receipt without shared secret
For checking receipt , recommend to use only for server side. I am not recommend to use from client side directly check it. However, sometime we want to use only on client side for some reason. Use with your own risk.
Please check [Apple guide ](https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW2).
```objc
[[IAPShare sharedHelper].iap checkReceipt:[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] onCompletion:^(NSString *response, NSError *error) {}];
```### Saving Product Identifier
```objc
[[IAPShare sharedHelper].iap provideContentWithTransaction:transaction];
```### Check for Previous Purchase
```objc
if([[IAPShare sharedHelper].iap isPurchasedProductsIdentifier:@"com.comquas.iap.test"]
{
// require saving product identifier first
}
```### Purchased Products
```objc
NSLog(@"%@",[IAPShare sharedHelper].iap.purchasedProducts);
```### Clear Purchases
```objc
[[IAPShare sharedHelper].iap clearSavedPurchasedProducts];
[[IAPShare sharedHelper].iap clearSavedPurchasedProductByID:@"com.myproduct.id"];
```### Restore Purchase
```objc
[[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
}
}}];
```## Example
```objc
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];NSLog(@"Price: %@",[[IAPShare sharedHelper].iap getLocalePrice:product]);
NSLog(@"Title: %@",product.localizedTitle);[[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:[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] 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
}
}];
```