Связка ключей iOS не извлекает значения из фона

В настоящее время я сохраняю имя пользователя (адрес электронной почты) и хэш электронной почты и пароля с солью в цепочке ключей iOS. Я использую ARC-версию, найденную здесь.

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];

Я вернулся к версии keychainwrapper без ARC, но все равно получаю те же результаты. Буду признателен за любые отзывы по этому поводу. Это лишь небольшая часть моих пользователей, но это проблема, которую я хотел бы исправить и не беспокоиться о ней. Заранее спасибо.

Кроме того, вся моя фоновая работа настроена в backgroundTask, чтобы предотвратить истечение времени ожидания. У меня нет никаких проблем с работой, связанной со связкой ключей, но я не позволяю этому двигаться вперед, пока мой токен не будет заполнен.

РЕДАКТИРОВАТЬ Я выяснил свою проблему с тем, что цепочка для ключей не извлекает значения из фона. Я опубликую ответ ниже и приму его, так как чувствую, что этот вопрос может стать ценным для других позже.

81
задан Bill Burgess 14 May 2012 в 12:05
поделиться