Tworzę grę w Cocos2d-iPhone i podczas aktualizacji do iOS 6 zauważyłem, że Apple zmienił sposób uwierzytelniania Game Center, używając authenticateHandler zamiast authenticateWithCompletionHandler.

Dodałem nową metodę uwierzytelniania, ale gra zawiesza się teraz, jeśli gracz nie jest jeszcze zalogowany do Game Center. Nie ma problemu z uwierzytelnieniem, jeśli użytkownik jest już zalogowany.

Oto mój kod:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
    {
        if (viewController != nil)
        {
            AppController *appDelegate = (AppController*)[UIApplication sharedApplication].delegate;

            [delegate.viewController presentViewController:viewController animated:YES completion:nil];
        }
        else if (localPlayer.isAuthenticated)
        {
            NSLog(@"Player authenticated");
        }
        else
        {
            NSLog(@"Player authentication failed");
        }
    };
}

Wygląda na to, że zawiesza się podczas próby przedstawienia kontrolera widoku Game Center, mimo że używam dokładnie tego samego kodu, aby zaprezentować GKTurnBasedMatchmakerViewController bez problemów.

Każda pomoc byłaby bardzo mile widziana.

EDYCJA: Oto wyjątek, który pojawia się w przypadku awarii:

Uncaught Exception UIApplicationInvalidInterfaceOrientation: Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES

4
Ryan Maloney 27 wrzesień 2012, 05:05

2 odpowiedzi

Najlepsza odpowiedź

Tutaj możesz znaleźć przydatne informacje o Twojej awarii, myślę, że jest to przyczyna. https://developer.apple.com/library/ios/# informacje o wydaniu/Ogólne/RN-iOSSDK-6_0/_index.html

Aplikacje powinny udostępniać metodę delegata application:supportedIntefaceOrientationsForWindow i upewnić się, że portret jest jedną z zwracanych wartości maski.

Dodałem poniższy kod, aby naprawić tę awarię.

- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}
5
i.Posei 28 wrzesień 2012, 15:17

Miałem podobny problem, testowałem isAuthenticated i AuthenticateHandler z poziomu viewDidLoad, zawieszał się podczas próby przedstawienia widoku Game Center podczas ładowania bieżącego widoku w środku. Przeniosłem ten test do viewDidAppear

  • (void)viewDidAppear:(BOOL)animowany{

Teraz działa dobrze...

Również w przypadku ios 6 Game Center poprosi nieuwierzytelnionego użytkownika tylko raz, jeśli odmówi zalogowania, wyłączy Game Center dla tej aplikacji, a użytkownik będzie musiał przejść do Game Center, aby się zalogować.

0
Jamie West 27 wrzesień 2012, 14:30