2015-04-17 14 views
16

Sto riscontrando un problema con gli acquisti in-app su iOS. Ho 5 acquisti in-app in un gioco, i quali funzionano esattamente come previsto quando vengono testati su un iPhone 6 (iOS 8.3). Quando vado a testare su iPad Air 2 (iOS 8.2), tutti gli IAP falliscono immediatamente. Qualcun altro ha avuto questo problema? C'è un codice specifico per iPad che devo aggiungere?L'acquisto in-app funziona su iPhone ma non su iPad

MODIFICA: Stranamente, l'aggiornamento dell'iPad su iOS 8.3 ha risolto il problema. Qualche idea sul perché questo problema si sta verificando? Devo cambiare la mia app per supportare solo iOS 8.3 e versioni successive?

Per testare l'app, sto utilizzando TestFlight, la stessa connessione di rete e lo stesso ID Apple.

Il codice che sto utilizzando per acquisti in-app è qui sotto:

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; 
      } 
     } 
    } 
} 
+0

Usi Sandbox Tester? Utilizzi lo stesso account sui tuoi dispositivi? – Krivoblotsky

+1

Definire "fail immediato". Mostra codice o messaggi di errore (o entrambi). Confermare che il dispositivo ha accesso alla rete, login utente sandbox appropriato (come indicato da @Krivoblotsky), ecc. –

+0

Ho aggiornato la domanda per includere il codice e la risposta alla domanda di @Krivoblotsky. –

risposta

0

Senza una definizione di "fallire subito" la mia ipotesi migliore è che non si erano collegati per un test sandbox valida rappresentano il l'iPad e nel bel mezzo dell'aggiornamento della versione iOS questo si è riconciliato, ed è per questo che funziona su 8.3.

Il modo più semplice per ottenere test IAP di lavoro è quello di uscire da iTunes:

Settings -> App and iTunes Store -> Tap apple ID and log out. 

Una volta effettuato l'accesso, provare a fare un IAP e ti verrà richiesto di accedere in - una volta che si inserisci le credenziali dell'account di prova valide, lo IAP verrà scaricato; in caso contrario, pubblica qui i tuoi file di registro. Tieni presente che puoi trovare o creare account di prova all'interno di iTunes Connect.

IAP è un argomento estremamente complicato con numerosi punti di errore: il fatto che i tuoi IAP funzionino su un dispositivo, ma non un altro, fa riferimento a un problema di configurazione specifico del dispositivo su cui lo IAP ha avuto esito negativo.

-1

Di solito, quando un dispositivo non si esibisce nell'acquisto di app, è un'impostazione soggetta a restrizioni.

Se è stata selezionata e disattivata tale restrizione o tutte le restrizioni, è spesso possibile risolvere questo problema disconnettendosi completamente dall'App Store e spegnendo il dispositivo. Quando si avvia in modo pulito, è possibile accedere di nuovo. Quando accedi, assicurati di acquistare qualcosa (una canzone gratuita della settimana, un'app gratuita o anche un'app a pagamento) per passare attraverso le domande di verifica. Una volta fatto, ricontrolla un IAP (acquisto in-app) per assicurarti che le cose funzionino.

Come ultima risorsa, potrebbe essere necessario contattare il supporto Apple per l'ID Apple, ma la maggior parte delle volte è possibile risolvere questo problema senza il loro aiuto.

È necessario controllare le seguenti cose.

Assicurarsi che si può rispondere “Sì” a ciascuna di queste domande:

  • Avete abilitato acquisti in-app per il vostro ID App?
  • Avete controllato la vendita per il vostro prodotto?
  • L'ID bundle di .plist del tuo progetto corrisponde al tuo ID app?
  • Hai generato e installato un nuovo profilo di provisioning per il nuovo ID app?
  • Hai configurato il tuo progetto per firmare il codice utilizzando questo nuovo profilo di provisioning?
  • Si sta utilizzando l'ID prodotto completo quando si esegue SKProductRequest?
  • Hai aspettato diverse ore dall'aggiunta del prodotto a iTunes Connect?
  • Hai provato a eliminare l'app dal tuo dispositivo e a reinstallarla?
  • Il dispositivo è jailbroken? In tal caso, è necessario ripristinare il jailbreak affinché IAP funzioni.

Se avete risposto “No” ad una di queste domande, c'è il problema.

Si consiglia di visitare i seguenti collegamenti sicuramente avrete la soluzione.

https://www.innofied.com/in-app-purchase-working-ios-solution/

Problemi correlati