Работа с iPhone-приложением Я использую Google Plus SDK (GPPSignIn) для получения и обновления токенов аутентификации.iOS Обработка запросов с обновленными токенами аутентификации
Эти токены продолжаются в течение 1 часа. Когда я делаю запрос с истекшим токеном, веб-служба, которую я использую, возвращает конкретный код ответа HTTP, чтобы я знал, что мой токен истек.
После получения ответа, который закончился мой токен, я делаю звонок, чтобы обновить токен аутентификации. Теперь я хотел бы повторить запрос к веб-службе с новым токеном. И я хотел бы сделать это все в моем объекте запроса сервера.
Если я сам программировал все работы, я мог бы просто сделать запрос для обновления токена встроенным с запросом веб-сервера и после выполнения запроса токена, я мог бы продолжить запрос веб-сервера. Но поскольку работа с токеном осуществляется через SDK Google Plus, и они используют модель делегата для связи с завершением запроса аутентификации, я не знаю, как удерживать запрос в веб-службе до тех пор, пока токен не будет обновлен.
В настоящее время я пытаюсь создать «очень плохую» идею, которая показана ниже, где я пытаюсь поместить мой запрос в новый поток, а затем наложить этот поток на некоторое время, после чего он просыпается и мы надеемся, что новый токен доступен. Но должен быть лучший способ!
if (error !=nil && error.code == NSURLErrorUserCancelledAuthentication) {
//special handling of 401, which may be a Google Auth token failure.
// if it is, then let's go get a new token.
User *client = [[User alloc] init];
if(client.email != nil && client.password != nil){
if (client.accountType == AuthTypeGoogle) {
NSLog(@"attempt to get a new token");
// request new token
[client silentGoogleAuthentication];
//repeat request
if (repeatableRequest) {
dispatch_async(repeatQueue, ^{
[NSThread sleepForTimeInterval:4];
NSLog(@"sleepytime");
[self assignCredentialstoRequest];
[self makeRequest:notificationName repeatableRequest:false];
});
}
}
}
}
Любые указатели будут оценены. Я просмотрел несколько токенов для обновления токенов iOS, и я вижу много устаревших вопросов, но ни один из них не имеет приемлемого решения.