У меня есть приложение в App Store, которое использует геозоны для публикации обновлений нашего локального API. На сегодняшний день это был огромный успех. Пару месяцев назад я установил Flurry, чтобы получить представление об использовании клиента и любых необработанных исключениях. Я начал возвращаться к ошибкам, относящимся к сохраненному токену, который мы используем для аутентификации идентификатора пользователя.
Этот токен является соленым хешем MD5 имени пользователя и пароля. Никаких проблем здесь, мы используем это для всего в приложении. Я храню его в NSUserDefaults и извлекаю перед каждым вызовом API. Когда мы начали сужать наш поиск виновника, это показывает, что мы отправляем токен, которого нет нигде на наших серверах. Когда пользователь отключает геозону, он автоматически обновляет свой статус, но в фоновом режиме происходит сбой очень небольшого процента, что вызывает некоторые опасения клиентов.
Извините за длинный прекурсор, к вопросу. Что заставило бы мое значение в NSUserDefaults загружаться в строку NSString по-разному от одного раза к другому? Я проверил логику, она будет обновлять меня 3 раза подряд, когда я приду на работу, но 4-го я получу сообщение об ошибке токена с сервера. Там нет рифмы или причины, почему это не удается. Наш сервер регистрирует эти неисправные токены, и мы не можем сопоставить их ни с чем.
Так что, если у кого-то есть понимание этого вопроса, я был бы очень признателен. Может ли это быть испорчено, когда я сохраняю его в NSString? Могут ли быть некоторые несоответствия с моим методом POST? Это может даже быть на нашем сервере, я не знаю. Я надеюсь, что все на SO могут протянуть руку и помочь мне получить новое понимание. Заранее спасибо.
//Loading the token... done this way for EVERY API call
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *token = [defaults objectForKey:@"token"];
Код взят из моего класса API
//My POST method for updating our API
NSString *requestData = [NSString stringWithFormat:@"?auth_token=%@", token];
NSData *myRequestData = [NSData dataWithBytes: [requestData UTF8String] length: [requestData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:[NSString stringWithFormat:@"%@/api/user.json%@", webAddress, requestData]]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
NSData *jsonData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSDictionary *payloadData = [json JSONValue];
if([[payloadData objectForKey:@"success"] boolValue]) {
// if i get here, successful update
} else {
// update unsuccessful, error message returned... bad token
}