En iOS 7, en el SKPaymentTransaction clase, la propiedad transactionReceipt:

//Only valid if state is SKPaymentTransactionStatePurchased.

 @property(nonatomic, readonly) NSData *transactionReceipt

…es obsoleto. Pero, en mi código, he creado un InAppPurchase clase, y en mi método para el control de cómo es el método de la compra, estoy utilizando el método de delegado en mi código y es como:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

for (SKPaymentTransaction *transaction in transactions) {

    switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchasing:

                       //code and bla bla bla    
                          [self initPurchase];  
                          NSLog(@"PASO 1");          

            break;

        case SKPaymentTransactionStatePurchased:

                      //this is successfully purchased!
                            purchased = TRUE;
                            NSLog(@"PASO 2");
                           [self isPurchased];

                 NSLog(@"purchased %s", purchased? "true" : "false");

                     // and return the transaction data

  if ([delegate respondsToSelector:@selector(successfulPurchase:restored:identifier:receipt:)])
  [delegate successfulPurchase:self restored:NO identifier:transaction.payment.productIdentifier receipt:transaction.transactionReceipt];

                     //and more code bla bla bla 

            break;

        case SKPaymentTransactionStateRestored:

                    //and more code bla bla bla 

                          [self restorePurchase];
                          NSLog(@"PASO 3");

            break;

        case SKPaymentTransactionStateFailed:

                    //and more code bla bla bla 

                           [self failedNotification];
                           NSLog(@"PASO 4");

            break;

                    //------------------------------------------//
                    //              THANKS GUYS                //
                    //         GRETTINGS FROM BOLIVIA          //
                    //            ROCK ON!!!! n_n'             //
                    //------------------------------------------//

    }
   }
  }

transactionReceipt para la compra de la aplicación está en desuso en iOS 7. ¿Qué puedo reemplazarlo?

  • Muy valiosa la pregunta. La documentación específica para esta misma área de StoreKit se cambió el mismo día en que esta pregunta fue publicado, por lo que es posible, es todavía un trabajo en progreso y Apple va a aclarar el flujo. En el mientras tanto, alguien que busca la forma en que esto sería muy útil.

2 Comentarios

  1. 27

    Usted puede conseguir la recepción como el contenido de la mainBundle del appStoreReceiptURL. Usted puede encontrar referencias: developer.apple.com

    Esto no se ha probado el código, pero en la parte superior de mi cabeza, me gustaría decir algo en la línea de:

    [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]]

    debe obtener el mismo resultado que transactionReceipt que se utiliza para devolver.

    • Gracias tio!! a mí me funciona, rock ON!!!! XD
    • ¿qué pasa si hay más de una transacción?
    • Heads up – si aún no ha completado una compra con tu cuenta de prueba con esta aplicación, el appStoreReceiptURL se devuelve nil.
    • No puedo encontrar ninguna documentación para verificar esto. La documentación para appStoreReceiptURL dice claramente que este es para el paquete de la App Store de recibo (no para en-app-recibos de compra). También, esto no tiene ningún sentido para in-app-compra recibos porque podría tener varias suscripciones, por ejemplo, usted puede suscribirse de forma separada a la de noticias, deportes y canales de películas en streaming de vídeo de la aplicación.
    • Tengo datos diferentes entre [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] y transactionReceipt. Para verificar la recepción en el recinto de seguridad, los datos de appStoreReceiptURL resultados como un inválido recibo con "status":21002 pero el desuso transactionReceipt es válido con "status":0.
    • Ser conscientes de que el método para descodificar [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]] es diferente que el de la transacción.transactionReceipt.
    • usted puede elaborar?
    • Echa un vistazo mi respuesta aquí. mluisbrown vídeo del enlace sería un gran lugar para conseguir algunos quick’ n easy info, demasiado.
    • El appStoreReceiptURL propiedad es para la aplicación en sí, no para IAPs.
    • Lo que @jhabbott dijo — appStoreReceiptURL no es lo que estás buscando.
    • Mientras que los datos obtenidos a partir de transactionReceipt sólo contiene el recibo de la transacción específica, los datos encontrados en la appStoreReceiptURL es una clave-valor en el formato contenedor que encapsula un rango más amplio de información. Además de la IAP recibos también contiene el recibo de la misma aplicación, así como la cadena de certificados y firmas. developer.apple.com/library/ios/releasenotes/General/…
    • Hay una gran confusión y una explicación muy sencilla: El acuse de recibo que se obtiene de appStoreReceiptURL contiene información acerca de la todo las transacciones para su aplicación, salvo que los consumibles y no renovables, las suscripciones se incluyeron sólo una vez (creo que cuando el consumible o no renovables suscripción en su transacción de la cola). Que las direcciones de la confusión acerca de lo que sucede si el usuario realizado dos compras: consigue dos transacciones diferentes, pero el recibo contendrá tanto de ellos.
    • ¿Cómo podría obtener el recibo de la transacción específica de appStoreReceiptURL ?

  2. 2

    En caso de que alguien tal vez también confundidos acerca de este problema (tal vez también leer un poco anticuado, tutorial de como yo…)

    Por favor, compra La WWDC 2014 Sesión 305 Prevención de Compras no autorizadas con los Recibos. Abarca tanto a iOS & OS X, clara y completa.

Dejar respuesta

Please enter your comment!
Please enter your name here