2010-01-26 13 views
38

Fondamentalmente, ho provato a configurare gli acquisti di app su un'app di test prima di implementarli in un'app corretta su cui la mia azienda sta lavorando. Ho letto il pdf del kit di vendita e altri snippet circa 1000 volte, ma i prodotti sono ancora restituiti come vuoti. Qui è esattamente quello che ho fatto finora:iPhone In App Purchase - response.products sono ancora vuoti?

Configurazione di test app e in articoli di acquisto Test App
ho creato un nuovo ID app per 'Test App One' sul portale per gli sviluppatori della mia azienda in iPhone Dev Center. Mi sono assicurato che il prefisso fosse com.mycompany.testappone per garantire la possibilità di configurare gli acquisti in app. Rimanendo nella sezione ID app, mi sono configurato nell'acquisto di app spuntando l'opzione "Abilita l'acquisto in app".

Ho creato "Test App One" in iTunes Connect e completato la procedura usuale, ma selezionato "upload binary later" e non ho inviato per la revisione in quanto l'app non fa nulla. Sicuramente non dobbiamo inviare l'app per la revisione perché funzioni ?! Ho quindi fatto clic su Gestisci negli acquisti di app e ne ho creato uno nuovo con ID prodotto "test1" e l'ho approvato in modo tale da essere eliminato per la vendita.

Codice
ho creato un nuovo progetto in XCode chiamato TestAppOne e qui sono le uniche 2 classi sto usando per ora:

TestAppOneAppDelegate.h:

#import <UIKit/UIKit.h> 
#import <StoreKit/StoreKit.h> 

@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> { 
    UIWindow *window; 
} 

TestAppOneDelegate.m :

#import "TestAppOneAppDelegate.h" 

static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1"; 

@implementation TestAppOneAppDelegate 
@synthesize window; 

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
if([SKPaymentQueue canMakePayments]) { 
    NSLog(@"IN-APP:can make payments"); 
} 
else { 
    NSLog(@"IN-APP:can't make payments"); 
} 

[self requestProductData]; 
[window makeKeyAndVisible]; 
} 

- (void)requestProductData { 
NSLog(@"IN-APP:requestProductData"); 
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]]; 
request.delegate = self; 
[request start]; 
NSLog(@"IN-APP:requestProductData END"); 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
NSLog(@"IN-APP:productsRequest"); 
NSArray *myProduct = response.products; 
NSLog(@"IN-APP:array count: %i", [myProduct count]); 
[request autorelease]; 
NSLog(@"IN-APP:productsRequest END"); 
} 

- (void)dealloc { 
    [window release]; 
    [super dealloc]; 
} 

@end 

T esting sul dispositivo
Ho creato un account di prova sandbox e ho effettuato il logout dal mio account iTunes su iPhone, ma non ho eseguito l'accesso con l'account di prova poiché la documentazione ci dice di non farlo finché non viene richiesto all'acquisto palcoscenico. Ho poi costruire l'applicazione e qui è il registro sto ottenendo:

IN-APP:can make payments 
IN-APP:requestProductData 
IN-APP:requestProductData END 
IN-APP:productsRequest 
IN-APP:array count: 0 
IN-APP:productsRequest END 

Qualcuno può dirmi se ho lasciato alcuna fase fuori o se c'è qualcosa che sto facendo male. Purtroppo non sembrano esserci app di esempio fatte da Apple.

risposta

22

In realtà penso che devi inviare il file binario affinché funzioni.

È possibile impostare la data di rilascio sul lontano futuro.

+4

Basta inviarlo e respingerlo immediatamente. Non voglio fissare la data in futuro e non pensarci più! –

+0

Ah, ok. Buono a sapersi. Non l'ho ancora provato. –

+7

Grazie. Sfortunatamente, Apple ha dimenticato di includere questa importantissima informazione dalla loro documentazione, ma l'ho scoperto dopo aver letto questo utile tutorial: http: //troybrant.net/blog/2010/01/in-app-purchases-a-full -walkthrough/ – user218485

28

Un altro passaggio importante che viene spesso trascurato è che è necessario assicurarsi di avere una configurazione del contratto di applicazioni a pagamento iOS che si trova sotto la sezione "Contratti, IVA e bancari" di iTunes Connect. Per prima cosa devi fare clic sul pulsante di richiesta, quindi devi fare clic sui 3 pulsanti di impostazione (Informazioni di contatto, Informazioni bancarie, Informazioni fiscali)

+1

Questo ha fatto funzionare la mia. Grazie! – zgosalvez

+2

Devo già aggiungere un conto bancario valido solo per testare l'acquisto InApp? –

+0

è obbligatorio per il test sandbox? – Rajesh

4

Basta eliminare l'applicazione sul dispositivo e avviarla nuovamente da XCode. Ha risolto il problema per me.

Non è necessario caricare il file binario o attendere ore dopo aver creato l'acquisto in-app in iTunes Connect.

1

Non è necessario caricare file binari per il test Sandbox di InAppPurchase. Devi solo aggiungere l'elemento InAppPurchase in iTunesConnect e metterlo nello stato "Pronto per l'invio" (obbligatorio). Se lo invii per la revisione, ti darà sempre la risposta.prodotto vuoto.

18

Verificare se sono presenti ID prodotto non validi.

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 

for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
     NSLog(@"Invalid product id: %@" , invalidProductId); 
    } 
} 

Se ci sono validi gli ID prodotto Visita http://troybrant.net/blog/2010/01/invalid-product-ids/

Si tratta di un molto completo check-list per questo problema.

8

Controlla se il tuo identificatore di pacchetto (ad esempio com.company.appname) in XCode corrisponde a quello in iTunes Connect.

Non è necessario inviare il file binario affinché funzioni.

+1

Ho rinominato il progetto e anche l'ID del bundle è stato modificato (strano comportamento da Xcode). Ciò ha causato l'invalidazione di tutti gli ID prodotto. La tua risposta l'ha risolta. Grazie. –

2

Grazie alla risposta di alpere ho scoperto che ho usato l'ID prodotto errato. Era non come pensavo de.company.appname.PROFESSIONAL_LICENSE. Semplicemente usando PROFESSIONAL_LICENSE nel mio caso (senza le principali cose di ID bundle) funziona :)

1

Prova ad aggiungere un prodotto di abbonamento gratuito. Se appare sulla risposta, non c'è niente di sbagliato nel tuo codice. Poiché l'abbonamento gratuito è l'unico tipo che non richiede Accordi, Fiscali e Banche e se appare e gli altri tipi non lo sono, si tratta di un problema correlato al tuo contratto.

+1

Questo ha funzionato davvero. Il libero si presentò, ma quelli a pagamento non lo fecero a causa dei Contratti che non venivano firmati. Buon consiglio per i test – gmogames

0

Nel mio caso il motivo è stato l'hosting di contenuti da parte di Apple accesi per errore. Il prodotto era disponibile solo quando l'ho spento

Problemi correlati