ios - que - Compra en la aplicación funciona en iPhone pero no en iPad
itunes (2)
Tengo un problema con las compras dentro de la aplicación en iOS. Tengo 5 compras en la aplicación en un juego, todas las cuales funcionan exactamente como se espera cuando se prueban en un iPhone 6 (iOS 8.3). Cuando voy a probar en iPad Air 2 (iOS 8.2), todos los IAP fallan inmediatamente. ¿Alguien más ha experimentado este problema? ¿Hay algún código que sea específico para iPad que debo agregar?
EDITAR: Extrañamente, la actualización del iPad a iOS 8.3 solucionó el problema. ¿Alguna idea de por qué está ocurriendo este problema? ¿Debo cambiar mi aplicación para que solo sea compatible con iOS 8.3 y superior?
Para probar la aplicación, estoy usando TestFlight, la misma conexión de red y la misma ID de Apple.
El código que estoy usando para compras dentro de la aplicación es el siguiente:
func inApp() {
if (SKPaymentQueue.canMakePayments())
{
var productID:NSSet = NSSet(object: product_id);
var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>);
productsRequest.delegate = self;
productsRequest.start();
}else{
displayAlert()
}
}
func buyProduct(product: SKProduct){
var payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment);
}
func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
var count : Int = response.products.count
if (count>0) {
var validProducts = response.products
var validProduct: SKProduct = response.products[0] as! SKProduct
if (validProduct.productIdentifier == product_id) {
println(validProduct.localizedTitle)
println(validProduct.localizedDescription)
println(validProduct.price)
buyProduct(validProduct);
} else {
println(validProduct.productIdentifier)
}
} else {
displayAlert()
}
}
func request(request: SKRequest!, didFailWithError error: NSError!) {
self.displayAlert()
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Purchased:
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
if product_id == "com.shv.FrenzyTenLives" {
defaults.setInteger(10, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyFiveLives" {
defaults.setInteger(5, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyInfiniteLives" {
defaults.setBool(true, forKey: "infiniteLives")
} else if product_id == "com.shv.FrenzyShield" {
defaults.setInteger(5, forKey: "shieldValue")
} else if product_id == "com.shv.FrenzyRemoveAds" {
defaults.setBool(true, forKey: "adsRemoved")
adBanner.hidden = true
}
break;
case .Failed:
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
self.displayAlert()
break;
case .Restored:
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
if product_id == "com.shv.FrenzyTenLives" {
defaults.setInteger(10, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyFiveLives" {
defaults.setInteger(5, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyInfiniteLives" {
defaults.setBool(true, forKey: "infiniteLives")
} else if product_id == "com.shv.FrenzyRemoveAds" {
defaults.setBool(true, forKey: "adsRemoved")
adBanner.hidden = true
}
break;
default:
break;
}
}
}
}
Sin una definición de "fallar inmediatamente", mi mejor conjetura es que no ha iniciado sesión en una cuenta de prueba de sandbox válida en el iPad y en medio de la actualización de la versión de iOS, esto se reconcilió, por lo que funciona en 8.3.
La forma más fácil de hacer que las pruebas de IAP funcionen es cerrar sesión en iTunes:
Settings -> App and iTunes Store -> Tap apple ID and log out.
Una vez que haya cerrado sesión, intente hacer un IAP y se le solicitará que inicie sesión; una vez que ingrese las credenciales de prueba válidas, el IAP se descargará; de lo contrario, publique sus archivos de registro aquí. Tenga en cuenta que puede encontrar o crear cuentas de prueba dentro de iTunes Connect.
El IAP es un tema extremadamente complicado con numerosos puntos de falla: saber que sus IAP funcionan en un dispositivo, pero no en otro, apunta a un problema de configuración específico del dispositivo en el que falló el IAP.
Por lo general, cuando un dispositivo no funciona en la compra de aplicaciones, es un ajuste bajo restricciones.
Si ha marcado y desactivado esa restricción o todas las restricciones, a menudo puede solucionar esto cerrando la sesión en la App Store por completo y apagando el dispositivo. Cuando se inicie limpiamente, puede iniciar sesión de nuevo. Cuando inicie sesión, asegúrese de comprar algo (una canción gratuita de la semana, una aplicación gratuita o incluso una aplicación de pago) para resolver las preguntas de verificación. Una vez hecho esto, vuelva a verificar un IAP (compra en la aplicación) para asegurarse de que las cosas funcionen.
Como último recurso, es posible que deba ponerse en contacto con el Soporte de Apple para ID de Apple, pero la mayoría de las veces puede solucionar este problema sin necesidad de su ayuda.
Debe comprobar las siguientes cosas.
Asegúrese de que puede responder "Sí" a cada una de estas preguntas:
- ¿Ha habilitado las compras en la aplicación para su ID de aplicación?
- ¿Has marcado Cleared for Sale para tu producto?
- ¿Coincide la ID de paquete de .plist de su proyecto con su ID de aplicación?
- ¿Ha generado e instalado un nuevo perfil de aprovisionamiento para la nueva ID de aplicación?
- ¿Ha configurado su proyecto para firmar el código usando este nuevo perfil de aprovisionamiento?
- ¿Está utilizando la ID de producto completa cuando realiza una solicitud de SKProduct?
- ¿Ha esperado varias horas desde que agregó su producto a iTunes Connect?
- ¿Has intentado eliminar la aplicación de tu dispositivo y reinstalarla?
- ¿Su dispositivo tiene jailbreak? Si es así, debe revertir el jailbreak para que el IAP funcione.
Si respondió "No" a cualquiera de estas preguntas, ahí está su problema.
Usted debe visitar los siguientes enlaces definitivamente obtendrá una solución.
https://www.innofied.com/in-app-purchase-working-ios-solution/