You can first check if the player is authenticated or not, by reading the GKLocalPlayer object.
If there is not authenticated user, you can open the game centre app. The downside with this method is that after the user authenticates through the game centre app, he is still in the game centre app and has to "switch back" to your app. When he switches back, the authentication handler you defined in your code gets triggered.
-(void)clickedOnStartGame
{
if (_signedIn)
{
//Do what you need to.
}
else if (!_signedIn)
{
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Game Center"
message:@"If Game Center is disabled try logging in through the Game Center app"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:@"Open Game Center", nil];
[alertView show];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]];
}
}
EDIT: Note, that in Apple's documentation, they say that you shouldn't be prompting the user to log in again, or show a login prompt. The automated way, (which your code already has) is supposed to be the accepted way. Showing the alert view I described above just helps the user log into game centre since you aren't supposed to force the app to show a dialogue.