2015-04-06 3 views
6

La nostra app per iOS è stata recentemente respinta da Apple perché non era in grado di stabilire una connessione valida alla nostra API del server. Stiamo utilizzando uno user-agent appositamente formattato per registrare il token del dispositivo e così via. Se l'user-agent non si adatta alla nostra sheme, l'API blocca la richiesta.Impostazione User-Agent in AFNetworking

Tutto ha funzionato molto bene testando l'app sul simulatore e su un dispositivo reale. L'agente utente è stato impostato correttamente e le chiamate api hanno funzionato.

Come Apple ha testato l'app, l'hanno rifiutata perché l'app non era in grado di connettersi all'api. Quando abbiamo controllato i file di log del server, abbiamo notato che ogni richiesta inviata dai tester Apple aveva un agente utente completamente diverso da quello impostato nel codice.

L'(corretto) user-agent, che è stato impostato come abbiamo testato l'applicazione:

AppName-App/010002 iOS/8.1.2 on Apple iPhone/DeviceToken

L'(errata) user-agent, come appariva nei nostri log:

AppName/1.0.0.2 (iPad; iOS 8.1.3; Scale/2.00)

L'applicazione utilizza AFNetworking e imposta la sua user-agent come segue:

ConnectionManager.requestSerializer.setValue(IOSREQUESTHEADER, forHTTPHeaderField: "user-agent")

Hai idea del motivo per cui questo non funziona mentre Apple verifica l'app, mentre è completamente a posto quando lo facciamo?

migliori saluti

risposta

2

l'agente utente che appare nei log è user-agent di default di AFNetworking. Questo significa che il tuo codice che imposta l'intestazione non è stato chiamato.

Forse il codice verrà compilato in una versione di rilascio? Questo potrebbe accadere se hai qualcosa come #ifdef DEBUG o NSAssert() in un percorso logico correlato.

Se non si dispone di informazioni sufficienti, si prega di inviare un ulteriore codice.

+0

La funzione 'setValue' viene richiamata direttamente dopo l'inizializzazione del Framework. Questo deve essere nella build di rilascio perché altrimenti non ci sarebbe alcuna richiesta. Quindi non c'è alcuna possibilità che la funzione 'setValue' non venga compilata penso che sia –

+0

Difficile dire, quindi, senza più contesto. –

+0

Quali parti del codice potrebbero aiutare a indagare ulteriormente il problema? –

6

ho provato a cambiare il mio user agent con codice qui sotto

[self.requestSerializer setValue:@"VAL" forHTTPHeaderField:@"user-agent"];

ma non ha alcun effetto fino a rinominare @"user-agent"-@"User-Agent"

4

cercare di fare il prossimo:

NSString *userAgent = [self.manager.requestSerializer valueForHTTPHeaderField:@"User-Agent"]; 
userAgent = [userAgent stringByAppendingPathComponent:@"CUSTOM_PART"]; 
[self.manager.requestSerializer setValue:userAgent forHTTPHeaderField:@"User-Agent"]; 

questo salverà generato dai dati di rete di AF e come lo aggiungo con la tua parte