Apple の Game Center プログラミング ガイドによると、このコードは認証ハンドラーをセットアップします。ゲームの開始時にこれを実行すると、初めて実行するときに、ユーザーがまだログインしていない場合はログインするように求められます。
- (void)authenticateLocalPlayer {
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
if (viewController != nil) {
NSLog(@"Player not authenticated.");
} else if (localPlayer.isAuthenticated) {
NSLog(@"Authentication successful.");
} else {
NSLog(@"Authentication failed. Error: %@.",error);
}
};
}
ユーザーがまだログインしておらず、認証画面をキャンセルして通常どおりゲームをプレイしたとします。
ゲームにマルチプレイヤー マッチをプレイするためのボタンがあります。ユーザーがボタンを押すと、GKMatchmakerViewController
インスタンスを提示して他のプレイヤーを検索しようとします。
プレーヤーがログインしていないため、プレーヤーは実際にはログインしていないことを示すエラー ダイアログを受け取ります。ダイアログには [OK] ボタンしかなく、それを閉じることができます。
プレイヤーがどうしてもこのボタンを押すと、同じダイアログが表示されます。
ただし、これは奇妙な動作です。プレーヤーがマルチプレーヤー マッチをプレイしたいが、まだログインしていない場合は、ゲームがユーザーにログインを求める方が合理的です。
上記のコードはハンドラーをセットアップするため、実際には私が探しているものではありません。しかし、ブレークポイントを作成して、それviewController
がGKHostedAuthenticateViewController
インスタンスであることに気付きました。そのクラスのインスタンスを作成して提示できるのではないかと考えました。これは、技術的には、ユーザーにログインを促すことと同等であるはずです。
しかし、私が書いたときにXcodeはそのクラスを認識していないようです。私はこれを行うことは許可されていないという印象を受けています。
ユーザーに手動で Game Center へのログインを促すにはどうすればよいですか?