Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GameCenter login alert

In a game I am developing using GameCenter, I want to handle the following scenario:

  1. the user starts up the game. He is shown the system alert that prompts him to log on GameCenter. He ignores it for now.
  2. after a while, the user wants to log in to GameCenter and clicks on(for instance) the Leaderboards menu item. He choses cancel instead of Log in, for now.
  3. the process repeats several times. Eventually the user DOES want to log in to GameCenter. He clicks the Leaderboard menu item one more time.

In my tests, I have found that the alert popup raised by the call to "authenticateWithCompletionHandler" (as invoked by Apple's sample GameCenterManager) which suggests to log in to GameCenter only appears a limited number of times(4 or 5). The last time it appears, it says "Game Center Disabled, sign in with the Game Center application to enable"Afterwards". Afterwards, calling authenticateWithCompletionHandler no longer does anything visible -no prompt at all.

Playing FruitNinja I tried to replicate this. However, in their case, the popup saying "Game Center Disabled" does appear every time I click on a GameCenter item(Achievements, for instance).

What I'd like to do is to duplicate the functionality: that is, if you are not logged in to GameCenter, to have the standard game center alert appear all the times you click on the Leaderboard menu item.

Is there a way to learn whether the standard 'log in to game center' alert has appeared, or to force it to appear at all times(and not just the first couple of tries)?

like image 746
Alex Avatar asked Nov 30 '10 18:11

Alex


People also ask

Why does Game Center keep popping up on my iPhone?

Whenever a new iOS version is released, Apple displays splash screens informing you about the most important new features. This is valid for Game Center in iOS 15.

Is Game Center login same as Apple ID?

Make sure that you're signed in to Game Center with the same Apple ID that you use on your other devices. Go to Settings > Game Center to see the Apple ID that you're using with Game Center.

Is Game Center owned by Apple?

Game Center is a service by Apple that allows users to play and challenge friends when playing online multiplayer social gaming network games.


4 Answers

Here's an is an idea to workaround this issue:

No matter if a "GC authenticateWithCompletionHandler"-Request is cancelled

  • by the user tapping "Cancel" in the dialog

or due to the fact that

  • GC is disabled on the device (which happens after the user has cancelled the alert-dialog exactly 3 times (in iOS 5 at least))

you will always receive an NSError with code 2 saying "The requested operation has been cancelled.".

The only differentiator that i could find is the time passed between the authenticateWithCompletionHandler-Request and the the execution of the completion-Handler.

So when sending the request i am saving the time:

requestTime = [NSDate date]; 

and in my completion handler i measure the time lapsed:

NSDate* now = [NSDate date];
CFTimeInterval elapsedTimeSinceAuthenticationRequest = [now timeIntervalSinceDate:requestTime];
NSLog(@"time Elapsed: %f", elapsedTimeSinceAuthenticationRequest);

If the user cancelled the request, the time passed will be significantly longer compared to the time passed if GC cancelled the operation. In my tests, it took a user at least one second to cancel the dialog, whereas a GC-cancelled request took less than 0.1 seconds (on my iPhone 4)

Of course, these values may vary depending on the device the code runs on and on what else the processor is busy with at the moment. One pitfall i already examined is the application launch: If you are sending the authenticationRequest during applicationDidFinishLaunching as suggested by Apple, it took much longer for GC to cancel the request in my case, because the device is busy loading views and whatever is necessary to launch the app.

So let me know if you tried this solution and if it worked for you, as will i once i have done further testing...

like image 102
thumbsup Avatar answered Oct 16 '22 16:10

thumbsup


The behavior is something to the effect of, after N unsuccessful attempts - disable GameCenter for the app. Restarting the app or going to login in gamecenter itself will get it back online.

I forget which doc I read this in, but there is an Apple doc out there that explains this behavior.

like image 33
Brian Trzupek Avatar answered Oct 16 '22 16:10

Brian Trzupek


I couldn't find a good answer for this either, so I decided to just replicate the message once the I start getting the cancel error. This is still in development but it basically changes the button callback to display the error alert rather than display the leader-board.

Just a note, not sure if this will be approved or not since I am replicating an Apple error message.

-(void) gcLogin: (id) sender {
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) {
        if(error) {
            if([[error domain] isEqualToString:GKErrorDomain] && [error code] == GKErrorCancelled) {
                [ResourceManager showAlertWithTitle:@"GameCenter Disabled" message:@"Sign in with Game Center application to enable"];
                mGameCenterCancelled = YES;
            }
            NSLog(@"%@", [error description]);
        } else { 
            [self updateMenu];
            mGameCenterCancelled = NO;
        }
    }];
}
like image 3
Paul Bruner Avatar answered Oct 16 '22 16:10

Paul Bruner


I am playing around with Game Center myself right now I have seen the very same behavior. There is nothing in the documentation saying anything about the dialog only showing up the first couple of times. In my case I would like a way to tell beforehand if the user is already logged into Game Center, so that I can behave appropriately. But now I can not know this before the dialog is shown to the user.

Since we are running in the sandbox during development this behavior might of course be something that behaves differently during production but this is not an easy thing to find out.

like image 1
Daniel Avatar answered Oct 16 '22 14:10

Daniel