В настоящее время я храню имя пользователя (адрес электронной почты) и соленый хэш электронной почты и пароля в iOS KeyChain. Я использую версию ARC'ified, найденную здесь.
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];
Все это прекрасно работает, когда мне нужно вытащить токен для моих сетевых вызовов, пока приложение активно. Он работает для входа в систему с чистого запуска, а также всех сетевых вызовов. Проблема начинается, когда приложение находится в фоновом режиме.
Имейте в виду, что это происходит только эпизодически, и мне еще нужно привязать его к конкретной версии или устройству iOS.
Пользователь отправляет местоположение (мониторинг региона), и я хочу обновить сервер своим статусом. Я пытаюсь вытащить токен из брелка, так же, как и для каждого другого сетевого вызова, и обновить статус. Но для некоторых пользователей значение равно нулю. Без этого я не могу обновить сетевые материалы. Почему это работает для большинства, но не для небольшого процента?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
Я вернулся к не-ARC-версии keychainwrapper, но все же получаю те же результаты. Я был бы признателен за любые отзывы об этом. Это лишь небольшая часть моих пользователей, но это проблема, которую я хотел бы исправить и не беспокоиться. Спасибо заранее.
Кроме того, все мои фоновые работы настроены в backgroundTask, чтобы предотвратить тайм-ауты. У меня нет проблем с работой, связанной с цепочкой ключей, но я не позволяю вещам идти вперед, пока мой токен не будет заполнен.
ИЗМЕНИТЬ Я выяснил свою проблему, когда они связывают цепочку, не извлекая значения из фона. Я отправлю ответ ниже и приму его, поскольку я чувствую, что этот вопрос может стать ценным для других позже.