Estoy usando la compra en la aplicación para una aplicación de iPhone. Tengo una clase que actúa como SKProductsRequestDelegate
y SKPaymentTransactionObserver
, y todo está funcionando bien en la versión actualmente disponible en iTunes.La transacción vuelve después de finalizar la transacción: ha sido llamada en ella
Sin embargo, después de agregar recientemente un nuevo producto no consumible y probarlo en el entorno de Sandbox, ahora me encuentro con un problema extraño. Cada vez que lance la aplicación, la compra que hice ayer reaparece en la lista de transacciones que me pasó por paymentQueue:updatedTransactions:
, a pesar de que ya había llamado al [[SKPaymentQueue defaultQueue] finishTransaction:transaction]
(varias veces). ¡Es un muerto viviente!
En mi aplicación paymentQueue:updatedTransactions:
, que tengo:
for (SKPaymentTransaction* transaction in transactions)
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
case SKPaymentTransactionStateRestored:
{
....
DDLog(@"Transaction for %@ occurred originally on %@.", transaction.payment.productIdentifier, transaction.originalTransaction.transactionDate);
....
entonces procesar la compra, descargue el contenido del usuario y, por último, en otro método, hacer esto:
for (SKPaymentTransaction* transaction in [[SKPaymentQueue defaultQueue] transactions])
if (([transaction.payment.productIdentifier isEqualToString:theParser.currentProductID]) &&
((transaction.transactionState==SKPaymentTransactionStatePurchased) || (transaction.transactionState==SKPaymentTransactionStateRestored))
)
{
DDLog(@"[[ Transaction will finish: product ID = %@; date = %@ ]]", transaction.payment.productIdentifier, transaction.transactionDate);
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
ya que puede tener notado, no me estoy aferrando al objeto de transacción original por simplicidad, y es relativamente fácil encontrarlo más tarde desde la llamada al [[SKPaymentQueue defaultQueue] transactions]
. En cualquier caso, de hecho veo el resultado esperado; que la transacción se complete y que coincida exactamente con la identificación del producto y la fecha de la transacción original. Sin embargo, la próxima vez que ejecute la aplicación todo comienza de nuevo. Es como si nunca se notificara a iTunes Store que la transacción se completó, o se niega a reconocerla.
se las arregló para encontrar una solución para esto? @Craig McMahon – KarenAnne
Esta es una publicación de los foros de desarrolladores que describe el problema que todavía está sucediendo en 2017. https://forums.developer.apple.com/thread/72099 –