Attualmente sto memorizzando il nome utente (e-mail) e un hash salato dell'e-mail e della password nel KeyChain iOS. Sto usando la versione ARC'ified trovata qui .
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
[wrapper setObject:APP_NAME forKey:(__bridge id)kSecAttrService];
[wrapper setObject:email forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:token forKey:(__bridge id)kSecValueData];
Tutto funziona bene quando devo estrarre il token per le mie chiamate di rete mentre l'app è attiva. Funziona per l'accesso da un avvio pulito, così come per tutte le chiamate di rete. Il problema inizia quando l'app è in background.
Tieni presente che questo accade solo sporadicamente e devo ancora fissarlo a una versione o dispositivo iOS specifico.
L'utente fa scattare una posizione (monitoraggio della regione) e voglio aggiornare il server con il loro stato. Cerco di estrarre il token dal portachiavi, come faccio per ogni altra chiamata di rete e aggiorno lo stato. Ma per alcuni utenti, il valore è nullo. Senza di esso, non posso aggiornare le cose di rete. Perché dovrebbe funzionare per la maggior parte, ma non per una piccola percentuale?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
Sono tornato alla versione non ARC del keychainwrapper, ma ottengo comunque gli stessi risultati. Apprezzerei qualsiasi feedback su questo. È solo una piccola parte dei miei utenti, ma è un problema che vorrei risolvere e di cui non mi preoccupo. Grazie in anticipo.
Inoltre, tutto il mio lavoro in background è impostato in un backgroundTask per evitare che le cose scadano. Non ho problemi con il lavoro che circonda il portachiavi, ma non lascio che le cose vadano avanti finché il mio token non è pieno.
MODIFICA Ho capito il mio problema con il portachiavi che non recupera i valori dallo sfondo. Pubblicherò la risposta di seguito e l'accetterò poiché ritengo che questa domanda possa diventare preziosa per altri in seguito.