2015-05-01 5 views
0

Мое приложение имеет разрешение. В ответ, если я вошел в систему, я получаю токен, который я храню в NSUserDefaults.IOS расширение добавления нового выпуска NSUserDefaults после обновления из магазина приложений

Как работает текущее приложение: Когда я нажимаю кнопку входа, приложение отправляет имя пользователя и логин на сервер, в ответ приложение получает токен, если успех.

У меня есть пользователь сохранить с лексемами и другим полученным способом информации, которая содержит:

- (void)saveUserWithInfo...{ 

... 

[[NSUserDefaults standardUserDefaults] setObject:token 
              forKey:kUserToken]; 

Все отлично работает на этой стадии с маркером в приложении.

Для расширения IOS я хочу использовать этот маркер, чтобы проверить, если пользователь вошел в систему или нет. Я добавил следующую строку в метод сохранения пользователя выше:

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mayapp"]; 

[sharedDefaults setObject:token 
        forKey:kUserToken]; 

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

Проблема:

Когда я проверить это первый раз, когда он работает, как нужно, прежде чем я загрузить его в магазин. У меня была версия в App Store, которая не содержала расширения iOS и новое хранилище общего доступа NSUserDefaults, которое должно содержать токен.

После того, как я обновил версию до новой и загрузил ее, я открыл ее при первом расширении, но он показал мне ошибку, что пользователь не вошел в систему, что кажется правильным, потому что у общего хранилища NSUserDefaults нет токена. В моем текущем рабочем процессе токен можно сохранить после нажатия кнопки входа. Но после обновления с версии без расширения до версии с расширением из App Store, мой пользователь все еще находится в конечно, для приложения, потому что оригинальный NSuserDefaults содержит маркер, но новый общий NSUserDefaults еще не получил фишку, потому что мы должны войти и затем войти в систему чтобы он работал.

Мой вопрос в том, как установить токен на новый общийNSUserDefaults без выхода из системы, а затем логин назад. Конечно, когда я войти в системе он начинает вызывать все новые строки из обновлений и есть мой новый общегоNSUserDefaults, которые я добавил для расширения IOS. Таким образом, после нового входа в систему он будет содержать маркер, и если открыть расширение это работает, но сначала начинают сразу же после версии обновлений из App Store показывают ошибки, что пользователь не вошел в систему - которая прямо из-за нового добавил совместноNSUserDeafults

ответ

1

Вы действительно должны использовать брелок.

В любом случае, вы должны иметь «обновленную» часть логики в делетете приложения (или запущенном оттуда), который запускается при каждом запуске приложения и проверяет ситуацию. В вашем текущем случае логикой является проверка общих значений по умолчанию для ключа входа и проверка не общего для ключа. Если ключ существует в одном, а не другом, скопируйте его и сохраните.

+0

да я думаю, что если приложение выходит на передний план, мы можем проверить его и установить нужный ключ, если он существует. Но что вы имеете в виду о брелках, можете ли вы поделиться ссылкой? –

+0

Хранение жетонов в пользовательских настройках по умолчанию небезопасно, такая информация должна храниться в цепочке ключей – Wain