¿Hay alguna manera de saber la compra realizada por la count de iTunes? – iOS

Mi aplicación ofrece un tipo no consumible dentro de la aplicación. La aplicación tiene una installation de inicio de session. ¿Es posible realizar compras basadas en usuarios registrados en mi aplicación?

Sé que suena incómodo. Déjame especificar el problema.

El dispositivo tiene un usuario que ya inició session en la tienda de iTunes. En ese momento, cuando mi aplicación se instala en el dispositivo por primera vez, cualquier usuario puede iniciar session con cnetworkingenciales en mi aplicación. Considera que hizo una compra y se desconectó de la aplicación. Ahora, otro usuario inició session en la aplicación y no puede usar las instalaciones disponibles para el usuario anterior después de la compra de la aplicación. Pero como sabe, compra de productos no consumibles basada en la count de la tienda de iTunes (solo se puede comprar un producto no consumible para cada count). Lo he intentado siguiendo el path …

  1. Almacene el ID de usuario en iCloud, pero no sé por qué count de iTunes se realizó esa compra. Por lo tanto, no pude mostrar el post adecuado "Debe iniciar session con una count de iTunes diferente para realizar la compra".

  2. En Android, con In-app Billing v3, se puede enviar una cadena de developer payload junto con la request de compra. Esta cadena también se devuelve cuando se realiza una consulta para esa compra. Entonces, esto se puede usar para identificar al usuario que realizó la compra. ¿Hay algo similar disponible en iOS?

A partir de iOS 7, SKMutablePayment tiene una propiedad de nombre de applicationUsername que se puede configurar cuando se realiza un pago. Y, SKPaymentQueue tiene the restreCompletedTransactionsWithApplicationUsername: method (link) .

La guía de Apple es comstackr la ID de usuario del lado del server y dejar pasar eso en la compra y restauración. Entonces, en su caso, si el usuario A de iTunes compra el producto, estará vinculado a su ID de usuario del lado del server para ese comprador. Entonces, si iTunes User B intenta restaurar, la restauración fallará, ya que seguirían pasando la misma ID de usuario del lado del server.

También deberá rastrear (en el server) que su ID de usuario del lado del server haya comprado el producto. De lo contrario, si el usuario B de iTunes intenta restaurar, necesitará saber la diferencia entre haber iniciado session en el dispositivo con una count de iTunes diferente y nunca haber comprado. Y, por supuesto, también querrás evitar que el mismo usuario del lado del server compre el producto dos veces, en diferentes counts de iTunes.

Advertencias:

  • Si ya tiene compras realizadas en producción, es probable que esto no funcione.
  • iOS 7 o más
  • El escenario "ya comprado" que mencioné anteriormente.

si la compra de restauración es un éxito de lo comprado por esta count.

 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue]restreCompletedTransactions]; // Then this is called - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { NSLog(@"%@",queue ); NSLog(@"Restonetworking Transactions are once again in Queue for purchasing %@",[queue transactions]); NSMutableArray *purchasedItemIDs = [[NSMutableArray alloc] init]; NSLog(@"received restnetworking transactions: %i", queue.transactions.count); for (SKPaymentTransaction *transaction in queue.transactions) { NSString *productID = transaction.payment.productIdentifier; [purchasedItemIDs addObject:productID]; NSLog (@"product id is %@" , productID); // here put an if/then statement to write files based on previously purchased items // example if ([productID isEqualToString: @"youruniqueproductidentifier]){write files} else { nslog sorry} } }