Skip to content

wilddylan/APKit

Repository files navigation

##APKit

MIT Licence FOSSA Status

How to use

The under code block only for OS X:

if ( ![NSData dataWithContentsOfURL:[NSBundle mainBundle].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]]; return YES; }
- (void)applicationWillTerminate:(UIApplication *)application { #warning Remove transaction observer [[SKPaymentQueue defaultQueue] removeTransactionObserver: [APStoreObserver sharedInstance]]; }

Set result listener:

- (instancetype)init { self = [super init]; if ( self ) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleProductRequestNotification:) name:APProductRequestNotification object:[APProductManager sharedInstance]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@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 { [super viewDidLoad]; 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. [self verifyReceipts]; 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 = [[NSBundle mainBundle] appStoreReceiptURL]; NSData *data = [NSData dataWithContentsOfURL: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

License

Stars

Watchers

Forks

Packages

No packages published