Domanda

Sto provando a testare gli acquisti in app sul mio iPhone e ho riscontrato un problema in cui gli ID prodotto che richiedo informazioni per finire per essere restituiti come ID prodotto non validi tra " didRecieveResponse " metodo.

Ho:

  • Creato un prodotto in negozio associato a questa app. Il suo ID bundle corrisponde a tutto il resto. È stato autorizzato alla vendita e approvato dallo sviluppatore.
  • Assicurati che il mio nuovo profilo di provisioning abbia attivato gli acquisti di app in negozio e abbia il nome completo dell'app: " com.domain.appname "
  • Assicurati che questo sia il profilo di provisioning utilizzato per firmare l'app sul mio iPhone.
  • Assicurati che " com.domain.appname " è l'ID app utilizzato per creare il profilo di provisioning.
  • Assicurati che " com.domain.appname " è usato nel mio file plist come identificativo del bundle.

Sembra che tutto sia a posto, tuttavia continuo a ricevere i miei prodotti restituiti come ID non validi.

Questo è il codice che sto usando:


- (void)requestProductData {
   SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
   request.delegate = self;
   [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
   NSArray *myProducts = response.products;
   NSArray *myInvalidProducts = response.invalidProductIdentifiers;

   for(int i = 1; i < myInvalidProducts.count; ++i)
   {
      std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
   }

   for(int i = 0; i  < myProducts.count; ++i)
   {
      SKProduct * myProduct = [myProducts objectAtIndex:i];
      std::cout << "Product Info:"  << std::endl;
      std::cout << "\tlocalizedTitle         = "  << [[myProduct localizedTitle] UTF8String]  << std::endl;
      std::cout << "\tlocalizedDescription   = "  << [[myProduct localizedDescription] UTF8String]  << std::endl;
      std::cout << "\tproductIdentifier      = "  << [[myProduct productIdentifier] UTF8String]  << std::endl;
      std::cout << "\tprice                  = "  << [[myProduct price] doubleValue]  << std::endl;
      std::cout << "\tpriceLocale            = "  << [myProduct priceLocale]  << std::endl;
   }

   [request autorelease];
}

Tutti gli ID dei miei prodotti vengono visualizzati nelle stampe non valide e nessuno di essi viene visualizzato tra " Informazioni sul prodotto: " stampe.

Eventuali suggerimenti sarebbero molto apprezzati ...

P.S. Sì, questo è costruito come Objective-c / c ++.

È stato utile?

Soluzione 7

OK, quindi dopo aver fatto tutto ciò che potevo pensare e aver letto tutti i forum, ecco cosa ha funzionato:

Ripeti TUTTO.

  1. Rimuovi TUTTI i profili di provisioning da Xcode Organizer.
  2. Chiudi Xcode.
  3. Crea un nuovo ID app.
  4. Crea un nuovo profilo di provisioning con il nuovo ID app.
  5. Crea un nuovo profilo di provisioning di distribuzione con il nuovo ID app.
  6. Crea una nuova app in iTunes Connect
  7. Avvia Xcode, installa i tuoi due nuovi profili di provisioning. Aggiorna l'ID del bundle yoru in modo che corrisponda. Assicurati inoltre che le stringhe di id che le richieste dell'app vengano aggiornate per riflettere il tuo ID bundle.
  8. Crea il tuo progetto in modalità di distribuzione con il nuovo profilo di provisioning di distribuzione.
  9. Carica il tuo nuovo binario. (Lascialo non respinto)
  10. Configura l'acquisto in-app di prova.
  11. Crea il tuo progetto in modalità Debug con il nuovo profilo di provisioning.
  12. Richiesta di test.

Questo è ciò che serve per far funzionare il mio negozio. La mia ipotesi migliore è che i server back-end di Apple vengano rovinati a volte e devi solo ricominciare da capo.

Spero che questo aiuti tutti!

Altri suggerimenti

Ho provato tutto ciò che è stato suggerito nei forum Apple e qui, e ancora non sono riuscito a farlo funzionare. Trovata la soluzione: l'app deve essere trasferita da Xcode per abilitare il sandbox.

Ovvio, vero? Bene, se stai lavorando con un aggiornamento a un account esistente, il dispositivo lo tratterà comunque come un'app installata sull'App Store.

Eliminalo, quindi trasferiscilo di nuovo. Dovrebbe funzionare ora :)

L'eliminazione dell'app sull'iPhone di prova e la sua reinstallazione hanno funzionato. Inoltre ho aspettato anche 8 ore da quando ho inviato l'articolo di acquisto in-app.

Procedi nel seguente modo:

  1. Accedi a iTunes connect utilizzando il tuo account sviluppatore ( https: // itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/ ).

  2. Vai alla scheda - " Contratti, tasse e servizi bancari "

  3. Controlla i contratti di richiesta e i contratti nelle sezioni Elaborazione.

  4. Dai un'occhiata al " Applicazioni a pagamento iOS " e lì è necessario impostare le informazioni di contatto, le informazioni bancarie e le informazioni fiscali.

  5. Quando " Applicazioni a pagamento iOS " la cella passerà alla sezione Contratti nella sezione Effetto, potrò utilizzare i Prodotti per l'acquisto in app.

Per ulteriori informazioni, consultare il link seguente: http://developer.apple.com/library/ios/#technotes /tn2259/_index.html

Si noti che quando si esegue il jailbreak di iPhone il pacchetto AppSync interrompe completamente il test test di acquisto in-app. AppSync è installato con Install0us come dipendenza.

Non è necessario ripristinare completamente iOS, basta disinstallare AppSync in Cydia per testare con successo gli acquisti in-app .

Tutti i suggerimenti di tutti i forum, tutorial e commenti su fixind 'prodotto non valido' non hanno funzionato per me fino a quando non ho rimosso AppSync.

Ho riscontrato un problema simile con una nuova app (v1.0 non ancora rilasciata in negozio) che stavo cercando di aggiungere anche negli acquisti di app. Ho impostato tutto, aggiunto prodotti, ecc. E i miei prodotti SEMPRE sono tornati non validi quando ho fatto una richiesta SKProducts.

Stavo per rinunciare all'intero processo, quando ho visto un post tangenzialmente correlato sui forum degli sviluppatori Apple. Ha suggerito di eliminare l'app dal dispositivo di test e di eseguire una nuova build + installazione. Questo ha funzionato.

Giusto per essere sicuro, l'ho provato su un altro dispositivo che mi dava lo stesso problema, e lo ha risolto anche lì.

È solo un'ipotesi, ma penso che se il dispositivo ha una build creata con un profilo di provisioning creato PRIMA di aggiungere IAP, è necessario rimuovere quella build e inserirne una nuova utilizzando l'API profilo. (Cioè, semplicemente sostituire l'app in atto non farà il trucco.)

se non c'è niente di sbagliato nel tuo codice, a volte ha restituito ID prodotto non valido solo perché, potresti aver bisogno di un tempo superiore a 10 ore per cambiare le tue informazioni. avere effetto. In alternativa, il prodotto potrebbe non essere valido perché sul dispositivo sono rimasti degli errori, quindi puoi riprovare con eliminare l'app e crearla di nuovo. con la mia esperienza, spero che sia d'aiuto.

L'interfaccia di iTunes Connect per IAP è stata recentemente aggiornata e può causare Invalid: < ID prodotto & Gt; errore.

Ora puoi aggiungere un IAP in iTunes connect senza impostare il prezzo predefinito su 0 USD e ti permetterà di salvare quella voce.

La vecchia versione dell'interfaccia utente si lamenterebbe quando si preme Salva se non si è precedentemente modificato il campo dei prezzi.

È molto facile perdere completamente questo campo e qualsiasi tentativo di ottenere informazioni utilizzando tale ID prodotto tramite qualsiasi chiamata iOS comporterebbe Invalid: < ID prodotto & Gt; piuttosto che dirti che ha trovato < ID prodotto & Gt; al prezzo di USD 0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top