2013-07-12 10 views
6

Il revisore di appStore ci richiede di acquistare il tipo Non-renewing subscriptions che non imporrà all'utente di registrarsi. Significa anche che l'utente non si registra, ma può anche acquistare Non-renewing subscriptions tipoRipristina transazioni per abbonamenti senza rinnovo senza registrazione

E il documento Apple richiede Non-renewing subscriptions deve essere ripristinato. Egli ha detto:

abbonamenti non-rinnovamento e prodotti di consumo non sono automaticamente ripristinato da Kit Store. Gli abbonamenti non rinnovati devono essere ripristinati, tuttavia, . Per ripristinare questi prodotti, è necessario registrare le transazioni sul proprio server al momento dell'acquisto e fornire il proprio meccanismo per ripristinare tali transazioni sui dispositivi dell'utente.

Così quando il registro utente, mi darà all'utente un'userId unico, si può ottenere l'ID utente con il proprio nome utente e password, quindi posso condividere informazioni dell'utente per diversi dispositivi iOS, e posso ripristinare le transazioni, perché hanno un ID utente unico.

Ma il problema è questo: quando l'utente non si registra, il mio server darà loro anche un ID utente unico, l'utente che non registra salverà l'ID utente allo .plist. Possono anche ripristinare le transazioni. Ma quando elimina la mia app, e poi scarica una volta, l'ID utente viene perso, quindi non può ripristinare le transazioni. Sarà un normale utente predefinito.

Vuol AppStore sarà respingere la mia app per la ragione:

Impossibile ripristinare le transazioni per non rinnovare abbonamenti senza registrazione, che eliminare l'app prima del ripristino

Se AppStore rifiuterà, come sistemarlo, grazie a tutti.

+0

Sono preoccupato dell'idea di fornire l'ID utente all'utente o di memorizzarlo su .plist. Cosa succede se un utente malintenzionato pubblica questo ID utente online? Questo potrebbe infrangere la tua sicurezza, sì? (Le informazioni di .plist sono disponibili tramite programmi come iExplorer). –

+0

@ChrisPrince Può pubblicare il suo userId online, ma il nostro server ha un elenco di transazioni. Una sottoscrizione (che non viene utilizzata) può essere ripristinata con esito positivo una sola volta. Se invia messaggi ad altri, uno degli altri può ripristinare con successo e non può ripristinarlo. In modo che non avrebbe infranto la mia sicurezza. –

+0

@ChrisPrince Si noti che: le transazioni sono importanti. UserId significa solo ripristinare a chi. Alcuni hacker rubano le tue transazioni e vendono le transazioni ad altri utenti. –

risposta

4

Ho inviato la mia app all'App Store.

Ripristino transazioni per abbonamenti non rinnovati che si registrano o eseguono l'accesso.

Non ripristinare le transazioni per gli abbonamenti non rinnovati che non "registrano" e "eliminano la mia app".

La mia app è approvato

+0

Ciò significa che potrebbero accettare un'app che non ripristina gli acquisti se iCloud non ha effettuato l'accesso. Giusto? cosa ne pensi? – hasan83

+0

@hasan La mia app supporta iOS4.3 +, quindi non c'è iCloud. E non trovo un modo perfetto per 'ripristinare le transazioni per gli abbonamenti senza rinnovo senza registrazione, che cancellano l'app prima del ripristino' Ripristino le transazioni per gli utenti di accesso e ripristinare le transazioni per gli ospiti che non eliminano la mia app –

+0

Questo è bello sapere . Sto seguendo una strategia simile per la mia app, ma non l'ho ancora presentata. –

1
  • La registrazione deve essere facoltativo per gli elementi InApp non rinnovabili.
  • È possibile fornire loro un messaggio che, se si desidera utilizzare su più dispositivi, è necessario registrarsi e accedere.
  • Durante la registrazione, le informazioni personali come e-mail e telefono non devono essere opzionali e devi spiegare loro in particolare il motivo per cui hai tenuto l'e-mail in registrazione (ad esempio, come il ripristino della password).
  • Proprio come il commento precedente, se l'inapp per l'elemento non rinnovabile non è così costoso, possono accettare l'applicazione. Ma se l'inapp è costoso, non ti permetteranno di violare nessuna delle loro regole.

Nota: è possibile utilizzare un meccanismo per utilizzare UUID e memorizzarlo nel portachiavi.Se si reinstalla l'applicazione, è possibile recuperarla dal portachiavi e utilizzare lo stesso UUID, è possibile gestire la scadenza sul server.

1

di Apple suggerisce di utilizzare iCloud per persistere i dati di acquisto:

#if USE_ICLOUD_STORAGE 
NSUbiquitousKeyValueStore *storage = [NSUbiquitousKeyValueStore defaultStore]; 
#else 
NSUserDefaults *storage = [NSUserDefaults standardUserDefaults]; 
#endif 

NSData *newReceipt = transaction.transactionReceipt; 
NSArray *savedReceipts = [storage arrayForKey:@"receipts"]; 
if (!receipts) { 
    // Storing the first receipt 
    [storage setObject:@[newReceipt] forKey:@"receipts"]; 
} else { 
    // Adding another receipt 
    NSArray *updatedReceipts = [savedReceipts arrayByAddingObject:newReceipt]; 
    [storage setObject:updatedReceipts forKey:@"receipts"]; 
} 

[storage synchronize]; 

almeno è meglio che gettare via le informazioni di acquisto, quando l'utente elimina l'applicazione. Fare in modo che il cliente paghi due volte per un servizio, non è una grande esperienza utente.

+0

transactionReceipt è obsoleto. – user965972

Problemi correlati