// // IAPHelper.mm // battle-array // // Created by Chongqing Challeng Technology Co.,Ltd. on 16/1/13. // Copyright © 2016年 Chongqing Challeng Technology Co.,Ltd. All rights reserved. // #import "IAPHelper.h" #import #import @implementation IAPHelper @synthesize products; @synthesize productId; -(id)init{ [[SKPaymentQueue defaultQueue]addTransactionObserver:(id)self]; return self; } -(void)fetchProducts{ SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithArray:@[@"VIP3", @"C90000"]]]; request.delegate = (id)self; [request start]; } -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(nonnull SKProductsResponse *)response{ products = response.products; for (SKProduct *product in products) { NSLog(@"Product %@ %@", product.productIdentifier, product.price.stringValue); } NSLog(@"Product was got"); if(productId != nil) { [self buy:productId]; productId = nil; } } -(void)request:(SKRequest *)request didFailWithError:(nonnull NSError *)error{ NSLog(@"%@", error); } -(void)buy:(NSString *)pid{ for (SKProduct *product in products) { if(product.productIdentifier == pid) { SKPayment *payment = [SKPayment paymentWithProduct:product]; [[SKPaymentQueue defaultQueue]addPayment:payment]; NSLog(@"Buy %@", product.productIdentifier); break; } } } -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(nonnull NSArray *)transactions{ for (SKPaymentTransaction *tx in transactions) { switch (tx.transactionState) { case SKPaymentTransactionStatePurchased: [[SKPaymentQueue defaultQueue]finishTransaction:tx]; [self paymentSuccess:tx]; break; case SKPaymentTransactionStateFailed: [[SKPaymentQueue defaultQueue]finishTransaction:tx]; NSLog(@"Error: %@", tx.error); [self paymentFailed:tx]; break; case SKPaymentTransactionStateRestored: [[SKPaymentQueue defaultQueue]finishTransaction:tx]; NSLog(@"SKPaymentTransactionStateRestored"); break; default: break; } } } -(void)paymentSuccess:(SKPaymentTransaction *)tx{ NSData *receiptData; if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) { receiptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]]; } else { receiptData = tx.transactionReceipt; } NSString *receiptStr = [receiptData base64EncodedStringWithOptions:0]; NSLog(@"SKPaymentTransactionStatePurchased %@", receiptStr); //UnitySendMessage("PaymentManager", "IOSPayment", receiptStr); NSString *gameObj = @"PaymentManager"; NSString *method = @"IOSPayment"; UnitySendMessage([gameObj UTF8String], [method UTF8String], [receiptStr UTF8String]); } -(void)paymentFailed:(SKPaymentTransaction *)tx{ NSString *gameObj = @"PaymentManager"; NSString *method = @"IOSPaymentError"; NSString *error = tx.error.localizedDescription; UnitySendMessage([gameObj UTF8String], [method UTF8String], [error UTF8String]); } @end extern void UnitySendMessage(const char* obj, const char* method, const char* msg); extern "C" { static IAPHelper* iapHelper; void _BuyProduct(const char *productId) { if(iapHelper == nil) { iapHelper = [[IAPHelper alloc] init]; } NSString *pid = [NSString stringWithUTF8String:productId]; pid = @"VIP3"; if(iapHelper.products == nil) { iapHelper.productId = pid; [iapHelper fetchProducts]; } else { [iapHelper buy:pid]; } } }