Game Center не отвечает на запрос authenticationWithCompletionHandler (iOS)

Вот моя ситуация:

1) Пользователь впервые открывает мое приложение. Я немедленно вызываю аутентификациюLocalUser, чтобы попытаться войти в Game Center. Появится всплывающее окно с кнопками «Войти», «Создать учетную запись» и «Отмена».

2) Пользователь не хочет входить в систему прямо сейчас, поэтому он нажимает кнопку «Отмена». (Это НЕ третий раз, когда они нажимают «Отмена», и я НЕ получаю сообщение «Игровой центр отключен, войдите в приложение Game Center, чтобы включить».) Пользователь может продолжать использовать мое приложение в обычном режиме.

3) Пользователь хочет использовать Game Center позже, поэтому он нажимает кнопку, которую я дал ему, чтобы войти в Game Center. Я снова вызываю authenticationLocalUser. На этот раз всплывающее окно НЕ появляется. На самом деле ничего не происходит, за исключением того, что я получаю эти сообщения журнала консоли:

2012-04-26 08:38:42.861 Clink[332:707] authenticateWithCompletionHandler: enter
2012-04-26 08:38:42.863 Clink[332:707] authenticateWithCompletionHandler: exit

4) Я протестировал как немедленное нажатие кнопки, которая снова вызывает authenticationLocalUser, так и ожидание значительного периода времени, прежде чем сделать это. В какой бы момент я ни вызывал authenticationLocalUser снова, снова ничего не появляется, и я получаю эту ошибку от функции:

Error Domain=GKErrorDomain Code=7 "The requested operation could not be completed because local player is already authenticating."

Итак, что происходит, когда я вызываю authenticationLocalUser на шаге 3, я прошу Game Center аутентифицироваться, но он зависает и не отвечает на мой запрос. Затем на шаге 4, когда я пытаюсь снова, он говорит мне, что не может обработать мой запрос, потому что он уже пытается пройти аутентификацию. Однако я ждал до 10 минут ответа на свой запрос на шаге 3 и так и не получил ответа от Game Center.

Это содержимое моей функции authenticationLocalUser. Насколько я помню, я не изменил его по сравнению с версией, которую я скачал из примера кода Apple.

- (void) authenticateLocalUser
{
    if([GKLocalPlayer localPlayer].authenticated == NO)
    {
        [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) 
        {
             [self callDelegateOnMainThread: @selector(processGameCenterAuth:) withArg: NULL error: error];
        }];
    }
}

Кто-нибудь еще сталкивался с этой проблемой раньше или есть какие-либо идеи о том, что может происходить? Я смотрю на это некоторое время и не совсем уверен, что происходит.

Заранее спасибо!!

8
задан WendiKidd 26 April 2012 в 14:05
поделиться