8

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] ボタンしかなく、それを閉じることができます。

プレイヤーがどうしてもこのボタンを押すと、同じダイアログが表示されます。

ただし、これは奇妙な動作です。プレーヤーがマルチプレーヤー マッチをプレイしたいが、まだログインしていない場合は、ゲームがユーザーにログインを求める方が合理的です。

上記のコードはハンドラーをセットアップするため、実際には私が探しているものではありません。しかし、ブレークポイントを作成して、それviewControllerGKHostedAuthenticateViewControllerインスタンスであることに気付きました。そのクラスのインスタンスを作成して提示できるのではないかと考えました。これは、技術的には、ユーザーにログインを促すことと同等であるはずです。

しかし、私が書いたときにXcodeはそのクラスを認識していないようです。私はこれを行うことは許可されていないという印象を受けています。

ユーザーに手動で Game Center へのログインを促すにはどうすればよいですか?

4

1 に答える 1

6

まず、GKLocalPlayer オブジェクトを読み取ることで、プレーヤーが認証されているかどうかを確認できます。

認証済みのユーザーがいない場合は、Game Center アプリを開くことができます。この方法の欠点は、ユーザーがゲーム センター アプリを介して認証した後、ユーザーはまだゲーム センター アプリにいるため、アプリに「戻る」必要があることです。彼が元に戻ると、コードで定義した認証ハンドラーがトリガーされます。

-(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:"]];
    }
}

編集:Appleのドキュメントでは、ユーザーに再度ログインするように求めたり、ログインプロンプトを表示したりしないでください。自動化された方法 (コードが既に持っている) は、受け入れられる方法であると想定されています。上で説明したアラート ビューを表示することは、ユーザーがゲーム センターにログインするのに役立つだけです。アプリにダイアログを表示するよう強制する必要はないからです。

于 2013-11-16T05:30:51.657 に答える