Revision control
Copy as Markdown
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "iosinapppurchasetransaction.h"
#include "iosinapppurchasebackend.h"
#import <StoreKit/StoreKit.h>
IosInAppPurchaseTransaction::IosInAppPurchaseTransaction(SKPaymentTransaction *transaction,
const TransactionStatus status,
InAppProduct *product,
IosInAppPurchaseBackend *backend)
: InAppTransaction(status, product, backend)
, m_nativeTransaction(transaction)
, m_failureReason(NoFailure)
{
if (status == PurchaseFailed) {
m_failureReason = ErrorOccurred;
switch (m_nativeTransaction.error.code) {
case SKErrorClientInvalid:
m_errorString = QStringLiteral("Client Invalid");
break;
case SKErrorPaymentCancelled:
m_errorString = QStringLiteral("Payment Cancelled");
m_failureReason = CanceledByUser;
break;
case SKErrorPaymentInvalid:
m_errorString = QStringLiteral("Payment Invalid");
break;
case SKErrorPaymentNotAllowed:
m_errorString = QStringLiteral("Payment Not Allowed");
break;
#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
case SKErrorStoreProductNotAvailable:
m_errorString = QStringLiteral("Store Product Not Available");
break;
#if QT_APPLE_SDK_EQUAL_OR_ABOVE(IOS(9, 3), TVOS(9, 2))
case SKErrorCloudServicePermissionDenied:
m_errorString = QStringLiteral("Cloud Service Permission Denied");
break;
case SKErrorCloudServiceNetworkConnectionFailed:
m_errorString = QStringLiteral("Cloud Service Network Connection Failed");
break;
#endif
#if QT_APPLE_SDK_EQUAL_OR_ABOVE(IOS(10, 3)) // , TVOS(10, 2)
case SKErrorCloudServiceRevoked:
m_errorString = QStringLiteral("Cloud Service Revoked");
break;
#endif
#endif
case SKErrorUnknown:
default:
m_errorString = QString::fromNSString([m_nativeTransaction.error localizedDescription]);
}
}
}
void IosInAppPurchaseTransaction::finalize()
{
[[SKPaymentQueue defaultQueue] finishTransaction:m_nativeTransaction];
}
QString IosInAppPurchaseTransaction::orderId() const
{
return QString::fromNSString(m_nativeTransaction.transactionIdentifier);
}
InAppTransaction::FailureReason IosInAppPurchaseTransaction::failureReason() const
{
return m_failureReason;
}
QString IosInAppPurchaseTransaction::errorString() const
{
return m_errorString;
}
QDateTime IosInAppPurchaseTransaction::timestamp() const
{
return QDateTime::fromNSDate(m_nativeTransaction.transactionDate);
}
#include "moc_iosinapppurchasetransaction.cpp"