123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- //
- // 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 <Foundation/Foundation.h>
- #import <StoreKit/StoreKit.h>
- @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<SKPaymentTransaction *> *)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];
- }
- }
- }
|