No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UnityEarlyTransactionObserver.mm 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #if !MAC_APPSTORE
  2. #import "UnityEarlyTransactionObserver.h"
  3. #import "UnityPurchasing.h"
  4. void Log(NSString *message)
  5. {
  6. NSLog(@"UnityIAP UnityEarlyTransactionObserver: %@\n", message);
  7. }
  8. @implementation UnityEarlyTransactionObserver
  9. static UnityEarlyTransactionObserver *s_Observer = nil;
  10. + (void)load
  11. {
  12. if (!s_Observer)
  13. {
  14. s_Observer = [[UnityEarlyTransactionObserver alloc] init];
  15. Log(@"Created");
  16. [s_Observer registerLifeCycleListener];
  17. }
  18. }
  19. + (UnityEarlyTransactionObserver*)defaultObserver
  20. {
  21. return s_Observer;
  22. }
  23. - (void)registerLifeCycleListener
  24. {
  25. UnityRegisterLifeCycleListener(self);
  26. Log(@"Registered for lifecycle events");
  27. }
  28. - (void)didFinishLaunching:(NSNotification*)notification
  29. {
  30. Log(@"Added to the payment queue");
  31. [[SKPaymentQueue defaultQueue] addTransactionObserver: self];
  32. }
  33. - (void)setDelegate:(id<UnityEarlyTransactionObserverDelegate>)delegate
  34. {
  35. _delegate = delegate;
  36. [self sendQueuedPaymentsToInterceptor];
  37. }
  38. - (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product
  39. {
  40. Log(@"Payment queue shouldAddStorePayment");
  41. if (self.readyToReceiveTransactionUpdates && !self.delegate)
  42. {
  43. return YES;
  44. }
  45. else
  46. {
  47. if (m_QueuedPayments == nil)
  48. {
  49. m_QueuedPayments = [[NSMutableSet alloc] init];
  50. }
  51. // If there is a delegate and we have not seen this payment yet, it means we should intercept promotional purchases
  52. // and just return the payment to the delegate.
  53. // Do not try to process it now.
  54. if (self.delegate && [m_QueuedPayments member: payment] == nil)
  55. {
  56. [self.delegate promotionalPurchaseAttempted: payment];
  57. }
  58. [m_QueuedPayments addObject: payment];
  59. return NO;
  60. }
  61. return YES;
  62. }
  63. - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {}
  64. - (void)initiateQueuedPayments
  65. {
  66. Log(@"Request to initiate queued payments");
  67. if (m_QueuedPayments != nil)
  68. {
  69. Log(@"Initiating queued payments");
  70. for (SKPayment *payment in m_QueuedPayments)
  71. {
  72. [[SKPaymentQueue defaultQueue] addPayment: payment];
  73. }
  74. [m_QueuedPayments removeAllObjects];
  75. }
  76. }
  77. - (void)sendQueuedPaymentsToInterceptor
  78. {
  79. Log(@"Request to send queued payments to interceptor");
  80. if (m_QueuedPayments != nil)
  81. {
  82. Log(@"Sending queued payments to interceptor");
  83. for (SKPayment *payment in m_QueuedPayments)
  84. {
  85. if (self.delegate)
  86. {
  87. [self.delegate promotionalPurchaseAttempted: payment];
  88. }
  89. }
  90. }
  91. }
  92. @end
  93. #endif