lib_unity_purchase/Plugins/UnityPurchasing/iOS/UnityEarlyTransactionObserv...

106 lines
2.7 KiB
Plaintext
Raw Permalink Normal View History

2024-01-29 18:49:33 +08:00
#import "UnityEarlyTransactionObserver.h"
#import "UnityPurchasing.h"
void Log(NSString *message)
{
NSLog(@"UnityIAP UnityEarlyTransactionObserver: %@\n", message);
}
@implementation UnityEarlyTransactionObserver
static UnityEarlyTransactionObserver *s_Observer = nil;
+ (void)load
{
if (!s_Observer)
{
s_Observer = [[UnityEarlyTransactionObserver alloc] init];
Log(@"Created");
[s_Observer registerLifeCycleListener];
}
}
+ (UnityEarlyTransactionObserver*)defaultObserver
{
return s_Observer;
}
- (void)registerLifeCycleListener
{
UnityRegisterLifeCycleListener(self);
Log(@"Registered for lifecycle events");
}
- (void)didFinishLaunching:(NSNotification*)notification
{
Log(@"Added to the payment queue");
[[SKPaymentQueue defaultQueue] addTransactionObserver: self];
}
- (void)setDelegate:(id<UnityEarlyTransactionObserverDelegate>)delegate
{
_delegate = delegate;
[self sendQueuedPaymentsToInterceptor];
}
- (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product
{
Log(@"Payment queue shouldAddStorePayment");
if (self.readyToReceiveTransactionUpdates && !self.delegate)
{
return YES;
}
else
{
if (m_QueuedPayments == nil)
{
m_QueuedPayments = [[NSMutableSet alloc] init];
}
// If there is a delegate and we have not seen this payment yet, it means we should intercept promotional purchases
// and just return the payment to the delegate.
// Do not try to process it now.
if (self.delegate && [m_QueuedPayments member: payment] == nil)
{
[self.delegate promotionalPurchaseAttempted: payment];
}
[m_QueuedPayments addObject: payment];
return NO;
}
return YES;
}
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {}
- (void)initiateQueuedPayments
{
Log(@"Request to initiate queued payments");
if (m_QueuedPayments != nil)
{
Log(@"Initiating queued payments");
for (SKPayment *payment in m_QueuedPayments)
{
[[SKPaymentQueue defaultQueue] addPayment: payment];
}
[m_QueuedPayments removeAllObjects];
}
}
- (void)sendQueuedPaymentsToInterceptor
{
Log(@"Request to send queued payments to interceptor");
if (m_QueuedPayments != nil)
{
Log(@"Sending queued payments to interceptor");
for (SKPayment *payment in m_QueuedPayments)
{
if (self.delegate)
{
[self.delegate promotionalPurchaseAttempted: payment];
}
}
}
}
@end