Skip to content

Repository files navigation

##APKit

MIT LicenceFOSSA Status

How to use

The under code block only for OS X:

if ( ![NSDatadataWithContentsOfURL:[NSBundlemainBundle].appStoreReceiptURL] ) {
exit(173);
}

Can be used in Objective-C or swift:

pod'APKit','~> 0.3.1'

run command pod update --no-repo-update.

InAppDelegate.m

#import<StoreKit/StoreKit.h>
#import<APKit/APKit.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#warning Add transaction observer
[[SKPaymentQueue defaultQueue] addTransactionObserver:[APStoreObserver sharedInstance]];
returnYES;
}
- (void)applicationWillTerminate:(UIApplication *)application {
#warning Remove transaction observer
[[SKPaymentQueue defaultQueue] removeTransactionObserver: [APStoreObserver sharedInstance]];
}

Set result listener:

- (instancetype)init {
self = [superinit];
if ( self ) {
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(handleProductRequestNotification:)
name:APProductRequestNotification
object:[APProductManager sharedInstance]];
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(handlePurchasesNotification:)
name:APPurchaseNotification
object:[APStoreObserver sharedInstance]];
}
return self;
}

handleProductRequestNotificationwill be fired when get response for product.

handlePurchasesNotification will be fired when get response for purchase.

Request product with identifier:

- (void)viewDidLoad {
[superviewDidLoad];
NSArray *productIdentifiers = @[
@"1994101101",
@"1994101102",
@"1994101103"
];
APProductManager *productManager = [APProductManager sharedInstance];
[productManager
fetchProductInformationForIds:productIdentifiers];
}
-(void)handleProductRequestNotification: (NSNotification *)notification {
APProductManager *productRequestNotification = (APProductManager*)notification.object;
APProductRequestStatus result = (APProductRequestStatus)productRequestNotification.status;
if (result == APProductRequestSuccess) {
NSLog(@"VALID: %@", productRequestNotification.availableProducts);
NSLog(@"INVALID: %@", productRequestNotification.invalidProductIds);
}
}

1994101103 is an invalid product identifier.

Purchase:

NSArray *productArray = productRequestNotification.availableProducts;
if ( productArray.count > 0 ) {
SKProduct *product_1 = productArray.firstObject;
APStoreObserver *storeObs = [APStoreObserver sharedInstance];
[storeObs buy:product_1];
}
#pragma mark - Handle purchase notification
-(void)handlePurchasesNotification: (NSNotification *)notification {
APStoreObserver *purchasesNotification = (APStoreObserver *)notification.object;
APPurchaseStatus status = (APPurchaseStatus)purchasesNotification.status;
switch ( status ) {
#pragma - Purchase
case APPurchaseSucceeded: {
NSLog(@"Purchase-Success: %@", purchasesNotification.productsPurchased);
// Verify receipts step.
[selfverifyReceipts];
break;
}
case APPurchaseFailed: {
NSLog(@"Purchase-Failed %@", purchasesNotification.errorMessage);
break;
}
case APPurchaseCancelled: {
NSLog(@"Purchase-Cancelled!");
break;
}
#pragma - Restore
case APRestoredSucceeded: {
NSLog(@"Restored-Success: %@", purchasesNotification.productsRestored);
break;
}
case APRestoredFailed: {
NSLog(@"Restored-Failed %@", purchasesNotification.errorMessage);
break;
}
case APRestoredCancelled: {
NSLog(@"Restored-Cancelled!");
break;
}
default:
break;
}
}

Watch for line 12, [self verifyReceipts]; it's important.

Verify receipt:

If you get some error, try to use SKReceiptRefreshRequest

NSURL *localReceiptURL = [[NSBundlemainBundle] appStoreReceiptURL];
NSData *data = [NSDatadataWithContentsOfURL:localReceiptURL];
NSString *receiptStr = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

send receiptStrto your server.

About local receipt verify local verify your receipt.

or use go-iap-verify-receipt

Release note
  • 0.3.2: Update comments and add some documents, update license, remove unused files and folders.

  • 0.3.0, 0.3.1: Clean workspace, format code with 2 indent.

  • 0.2.0: Download Hosted content.

  • 0.1.0: basic features develope, initialized repo.

ReadMe in cdn

APKit introduction

License

MIT.

FOSSA Status

About

IAP framework!

Topics

Resources

Stars

158 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages