IAPHelper.mm 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //
  2. // IAPHelper.mm
  3. // battle-array
  4. //
  5. // Created by Chongqing Challeng Technology Co.,Ltd. on 16/1/13.
  6. // Copyright © 2016年 Chongqing Challeng Technology Co.,Ltd. All rights reserved.
  7. //
  8. #import "IAPHelper.h"
  9. #import <Foundation/Foundation.h>
  10. #import <StoreKit/StoreKit.h>
  11. @implementation IAPHelper
  12. @synthesize products;
  13. @synthesize productId;
  14. -(id)init{
  15. [[SKPaymentQueue defaultQueue]addTransactionObserver:(id)self];
  16. return self;
  17. }
  18. -(void)fetchProducts{
  19. SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithArray:@[@"VIP3", @"C90000"]]];
  20. request.delegate = (id)self;
  21. [request start];
  22. }
  23. -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(nonnull SKProductsResponse *)response{
  24. products = response.products;
  25. for (SKProduct *product in products) {
  26. NSLog(@"Product %@ %@", product.productIdentifier, product.price.stringValue);
  27. }
  28. NSLog(@"Product was got");
  29. if(productId != nil)
  30. {
  31. [self buy:productId];
  32. productId = nil;
  33. }
  34. }
  35. -(void)request:(SKRequest *)request didFailWithError:(nonnull NSError *)error{
  36. NSLog(@"%@", error);
  37. }
  38. -(void)buy:(NSString *)pid{
  39. for (SKProduct *product in products)
  40. {
  41. if(product.productIdentifier == pid)
  42. {
  43. SKPayment *payment = [SKPayment paymentWithProduct:product];
  44. [[SKPaymentQueue defaultQueue]addPayment:payment];
  45. NSLog(@"Buy %@", product.productIdentifier);
  46. break;
  47. }
  48. }
  49. }
  50. -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(nonnull NSArray<SKPaymentTransaction *> *)transactions{
  51. for (SKPaymentTransaction *tx in transactions) {
  52. switch (tx.transactionState) {
  53. case SKPaymentTransactionStatePurchased:
  54. [[SKPaymentQueue defaultQueue]finishTransaction:tx];
  55. [self paymentSuccess:tx];
  56. break;
  57. case SKPaymentTransactionStateFailed:
  58. [[SKPaymentQueue defaultQueue]finishTransaction:tx];
  59. NSLog(@"Error: %@", tx.error);
  60. [self paymentFailed:tx];
  61. break;
  62. case SKPaymentTransactionStateRestored:
  63. [[SKPaymentQueue defaultQueue]finishTransaction:tx];
  64. NSLog(@"SKPaymentTransactionStateRestored");
  65. break;
  66. default:
  67. break;
  68. }
  69. }
  70. }
  71. -(void)paymentSuccess:(SKPaymentTransaction *)tx{
  72. NSData *receiptData;
  73. if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) {
  74. receiptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
  75. } else {
  76. receiptData = tx.transactionReceipt;
  77. }
  78. NSString *receiptStr = [receiptData base64EncodedStringWithOptions:0];
  79. NSLog(@"SKPaymentTransactionStatePurchased %@", receiptStr);
  80. //UnitySendMessage("PaymentManager", "IOSPayment", receiptStr);
  81. NSString *gameObj = @"PaymentManager";
  82. NSString *method = @"IOSPayment";
  83. UnitySendMessage([gameObj UTF8String], [method UTF8String], [receiptStr UTF8String]);
  84. }
  85. -(void)paymentFailed:(SKPaymentTransaction *)tx{
  86. NSString *gameObj = @"PaymentManager";
  87. NSString *method = @"IOSPaymentError";
  88. NSString *error = tx.error.localizedDescription;
  89. UnitySendMessage([gameObj UTF8String], [method UTF8String], [error UTF8String]);
  90. }
  91. @end
  92. extern void UnitySendMessage(const char* obj, const char* method, const char* msg);
  93. extern "C"
  94. {
  95. static IAPHelper* iapHelper;
  96. void _BuyProduct(const char *productId)
  97. {
  98. if(iapHelper == nil)
  99. {
  100. iapHelper = [[IAPHelper alloc] init];
  101. }
  102. NSString *pid = [NSString stringWithUTF8String:productId];
  103. pid = @"VIP3";
  104. if(iapHelper.products == nil)
  105. {
  106. iapHelper.productId = pid;
  107. [iapHelper fetchProducts];
  108. }
  109. else
  110. {
  111. [iapHelper buy:pid];
  112. }
  113. }
  114. }