|
|
@@ -44,6 +44,7 @@ struct SKDelegateAndPaymentObserver |
|
|
|
|
|
|
|
virtual void didReceiveResponse (SKProductsRequest*, SKProductsResponse*) = 0;
|
|
|
|
virtual void requestDidFinish (SKRequest*) = 0;
|
|
|
|
virtual void requestDidFailWithError (SKRequest*, NSError*) = 0;
|
|
|
|
virtual void updatedTransactions (SKPaymentQueue*, NSArray<SKPaymentTransaction*>*) = 0;
|
|
|
|
virtual void restoreCompletedTransactionsFailedWithError (SKPaymentQueue*, NSError*) = 0;
|
|
|
|
virtual void restoreCompletedTransactionsFinished (SKPaymentQueue*) = 0;
|
|
|
@@ -62,6 +63,7 @@ private: |
|
|
|
|
|
|
|
addMethod (@selector (productsRequest:didReceiveResponse:), didReceiveResponse, "v@:@@");
|
|
|
|
addMethod (@selector (requestDidFinish:), requestDidFinish, "v@:@");
|
|
|
|
addMethod (@selector (request:didFailWithError:), requestDidFailWithError, "v@:@@");
|
|
|
|
addMethod (@selector (paymentQueue:updatedTransactions:), updatedTransactions, "v@:@@");
|
|
|
|
addMethod (@selector (paymentQueue:restoreCompletedTransactionsFailedWithError:), restoreCompletedTransactionsFailedWithError, "v@:@@");
|
|
|
|
addMethod (@selector (paymentQueueRestoreCompletedTransactionsFinished:), restoreCompletedTransactionsFinished, "v@:@");
|
|
|
@@ -77,6 +79,7 @@ private: |
|
|
|
//==============================================================================
|
|
|
|
static void didReceiveResponse (id self, SEL, SKProductsRequest* request, SKProductsResponse* response) { getThis (self).didReceiveResponse (request, response); }
|
|
|
|
static void requestDidFinish (id self, SEL, SKRequest* request) { getThis (self).requestDidFinish (request); }
|
|
|
|
static void requestDidFailWithError (id self, SEL, SKRequest* request, NSError* err) { getThis (self).requestDidFailWithError (request, err); }
|
|
|
|
static void updatedTransactions (id self, SEL, SKPaymentQueue* queue, NSArray<SKPaymentTransaction*>* trans) { getThis (self).updatedTransactions (queue, trans); }
|
|
|
|
static void restoreCompletedTransactionsFailedWithError (id self, SEL, SKPaymentQueue* q, NSError* err) { getThis (self).restoreCompletedTransactionsFailedWithError (q, err); }
|
|
|
|
static void restoreCompletedTransactionsFinished (id self, SEL, SKPaymentQueue* queue) { getThis (self).restoreCompletedTransactionsFinished (queue); }
|
|
|
@@ -286,6 +289,25 @@ struct InAppPurchases::Pimpl : public SKDelegateAndPaymentObserver |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void requestDidFailWithError (SKRequest* request, NSError* error) override
|
|
|
|
{
|
|
|
|
if (auto receiptRefreshRequest = getAs<SKReceiptRefreshRequest> (request))
|
|
|
|
{
|
|
|
|
for (auto i = 0; i < pendingReceiptRefreshRequests.size(); ++i)
|
|
|
|
{
|
|
|
|
auto& pendingRequest = *pendingReceiptRefreshRequests[i];
|
|
|
|
|
|
|
|
if (pendingRequest.request == receiptRefreshRequest)
|
|
|
|
{
|
|
|
|
auto errorDetails = error != nil ? (", " + nsStringToJuce ([error localizedDescription])) : String ("");
|
|
|
|
owner.listeners.call (&Listener::purchasesListRestored, {}, false, NEEDS_TRANS ("Receipt fetch failed") + errorDetails);
|
|
|
|
pendingReceiptRefreshRequests.remove (i);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void updatedTransactions (SKPaymentQueue*, NSArray<SKPaymentTransaction*>* transactions) override
|
|
|
|
{
|
|
|
|
for (SKPaymentTransaction* transaction in transactions)
|
|
|
|