2012-07-26 14 views
5

Sto aggiornando la mia app iOS con il codice VerificationController di transazione suggerito da Apple per verificare gli acquisti in-app a causa del recente "hack" pubblicato che permetteva alle persone di acquistare acquisti in-ap senza pagare il dovuto per falsificare le ricevute da server Apple falsificati.chiede AppleID quando è in esecuzione

Ho tutto integrato e sto testando. Ho eseguito l'app più volte e il materiale di verifica è stato eseguito più volte.

Voglio testare tutto sull'acquisto incluso iniziare con una nuova app nuovissima e AppleID. Così ho eliminato completamente l'app dal mio dispositivo di test. Ho creato un AppleID "test user" nuovo di zecca in iTunes Connect. Sono andato all'app Impostazioni sul mio dispositivo di test, sono andato su Store e ho cambiato l'AppleID predefinito per il dispositivo con questo AppleID appena creato.

Riesco a rieseguire l'applicazione da Xcode con il debugger, che re-installa l'app sul dispositivo di test e lo esegue fresco.

Il problema è che quasi immediatamente sul lancio, il dispositivo di prova mette in sulla vista AppleID Password Alert-tipo e richiede la password per il vecchio AppleID che ho originariamente usato per testare tutto compreso il primo acquisto in-app e la verifica per questo. Non richiede la password per il nuovo dispositivo AppleID come impostato nell'app Impostazioni in archivio.

Quando ho eseguito come una nuova applicazione, il codice di verifica non viene eseguito e nessun codice da uno qualsiasi dei miei routine che fare nulla con la roba di Apple StoreKit è gestito ad eccezione di un solitario

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

(osservatore è il mio oggetto delegato per il materiale StoreKit e viene creato ma nessuna routine viene eseguita tranne init e init non fa altro che impostare una variabile statica per se stesso per creare una classe di tipo singleton)

Per motivi di controllo, ho aggiunto anche in

NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]); 

che non mostra nessuna vecchia transazione in giro.

Non ho idea del motivo per cui ha iniziato a chiedere il mio AppleID dell'utente test originale quando l'app è stata appena installata, l'AppleID per lo store per il dispositivo è diverso e non riesco a identificare nessun codice in esecuzione accede a StoreKit (ad eccezione di quanto menzionato sopra).

QUALSIASI approfondimento sarebbe apprezzato.

ETA: Toccando ANNULLA nella finestra di dialogo della password non viene eseguito alcun codice aggiuntivo nell'app e non si impedisce l'esecuzione dell'app.

Se poi si passa alla schermata di acquisto in-app (dove l'app interroga lo store per gli acquisti in-app disponibili), richiede nuovamente la password allo stesso modo, sul vecchio ID Apple. Posso cancellare e nulla sembra accadere. Se effettivamente tocco il pulsante "ripristina acquisti" nella mia app, chiede quindi la password sul nuovo AppleID come impostato nelle impostazioni del negozio. Non ho superato questo punto perché voglio capire cosa sta succedendo e non voglio rovinare tutto completando/tentando il ripristino o l'acquisto con il nuovo AppleID.

Grazie

+0

Hai risolto in qualche modo? –

+0

@bluesm Non ho mai risolto il problema e non uso più realmente quel dispositivo con cui avevo problemi. Scusate. Potrei eventualmente provare a tornare ad esso come ho ancora quel dispositivo in un cassetto ... – chadbag

risposta

2

StoreKit.framework lavori a livello di sistema, in modo che il ID Apple che viene visualizzato non ha nulla a che fare con la vostra applicazione, e reinstallare l'app non avrà alcuna influenza.

Tuttavia, è possibile log out from the iTunes Store/App Store:

  1. Tap Impostazioni → iTunes & App Store
  2. Battere l'Apple ID firmato a (pulsante in alto)
  3. Toccare "Esci"

Quando si utilizza di nuovo l'app, dovrebbe richiedere sia l'e-mail che la password.

+0

Non so se hai visto i commenti che l'AppleID non è correlato a quello memorizzato nelle impostazioni ("l'AppleID per il negozio per il dispositivo è diverso ") – chadbag

+0

È quasi come se iOS abbia memorizzato informazioni da qualche parte dicendo" questa app richiede informazioni di acquisto precedenti "e non può fare a meno di chiederlo sui carichi successivi. L'eliminazione dell'app è stata eliminata solo per me. – rob5408

+0

@chadbag Ah, scusa, non ti ho capito bene lì. Non sono sicuro di cosa stia succedendo allora. :( –

-1
Steps to Fix: 
1. Starting at the App Store, pull up the multi-task bar and tap the Settings app. 
2. Scroll down and tap 'General'. 
3. Scroll down and tap 'Date & Time'. 
4. If the 'Set Automatically' switch is ON, turn it OFF. 
5. Tap 'Set Date & Time'. 
6. Tap the field that says "[day of the week], [month][day], 2013". 
7. Adjust the year wheel to say "2012" and back out of the Date & Time section. 
8. Multi-task back to the App Store and attempt to download the app again. 
9. Tap 'Cancel' on the "Cannot connect…" modal. 
10. Return to the native Settings > General > Date & Time > Set Date & Time. 
11. Go back to the month, date, year wheels and change the year to "2030". 
12. Back out to the home screen and launch the App Store. 
13. A "Cannot connect to the Store" modal should appear right away. 
14. Tap 'OK' and then multi-task back to Settings. 
15. Return all the way back to the month, date, year wheels again and change the year back to "2013. 
16. Multi-task back to the App Store and attempt to download the app again. 
6

Ho avuto esattamente lo stesso problema e lottato per ore per risolverlo.

Come accennato in precedenza, StoreKit lavori a livello di sistema e il sistema mantiene chiedendo login per qualsiasi operazione per la quale

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

non è stato chiamato. Stavo usando RMStore, guardato il codice sorgente che ho trovato queste righe sospette:

if (error.code != RMStoreErrorCodeUnableToCompleteVerification) { 
    // If we were unable to complete the verification we want StoreKit to keep reminding us of the transaction 
    [queue finishTransaction:transaction]; 
} 

Questo è probabilmente quello che è successo:

  • ho acquistato il prodotto con la mia prova ID Apple
  • ho cancellato il prodotto a scopo di prova
  • Ho provato ad acquistarlo di nuovo. A questo punto ho inserito credenziali errate e RMStore non ha chiamato [[SKPaymentQueue defaultQueue] finishTransaction:.
  • L'app ha iniziato a chiedere l'accesso ad ogni avvio.

Ho provato ad accedere con un altro account di prova ma ho comunque lo stesso avviso chiedendo di accedere con il vecchio ID Apple. Ho anche cancellato l'ID Apple su iTunes Connect, ma questo non ha aiutato.

Finalmente sono riuscito a risolvere Restoring (non Purchasing) il prodotto con lo stesso account. Non so se c'è un altro modo per risolvere questo problema (ad esempio per ripristinare la coda StoreKit). In ogni caso ricordati sempre di chiamare finishTransaction nel tuo codice.