diff --git a/modules/juce_product_unlocking/native/juce_ios_InAppPurchases.cpp b/modules/juce_product_unlocking/native/juce_ios_InAppPurchases.cpp index 057a417d9464..2b7c56480de2 100644 --- a/modules/juce_product_unlocking/native/juce_ios_InAppPurchases.cpp +++ b/modules/juce_product_unlocking/native/juce_ios_InAppPurchases.cpp @@ -588,12 +588,14 @@ struct InAppPurchases::Pimpl : public SKDelegateAndPaymentObserver { if (auto productId = getAs (purchaseData[nsStringLiteral ("product_id")])) { - if (auto purchaseTime = getAs (purchaseData[nsStringLiteral ("purchase_date_ms")])) + auto purchaseTime = getPurchaseDateMs (purchaseData[nsStringLiteral ("purchase_date_ms")]); + + if (purchaseTime > 0) { purchases.add ({ { nsStringToJuce (transactionId), nsStringToJuce (productId), nsStringToJuce (bundleId), - Time ([purchaseTime integerValue]).toString (true, true, true, true), + Time (purchaseTime).toString (true, true, true, true), {} }, {} }); } else @@ -625,6 +627,26 @@ struct InAppPurchases::Pimpl : public SKDelegateAndPaymentObserver {}, false, NEEDS_TRANS ("Receipt fetch failed")); }); } + static int64 getPurchaseDateMs (id date) + { + if (auto dateAsNumber = getAs (date)) + { + return [dateAsNumber longLongValue]; + } + else if (auto dateAsString = getAs (date)) + { + auto* formatter = [[NSNumberFormatter alloc] init]; + [formatter setNumberStyle: NSNumberFormatterDecimalStyle]; + dateAsNumber = [formatter numberFromString: dateAsString]; + [formatter release]; + return [dateAsNumber longLongValue]; + } + else + { + return -1; + } + } + //============================================================================== static Product SKProductToIAPProduct (SKProduct* skProduct) {