3

Game Center での開発はまったくの初心者です。WWDC のビデオを見て、開発者の Web サイトを見ました。iOS 6 では、次のようなコードを入力することをお勧めします。

- (void) authenticateLocalPlayer
{
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
         if (viewController != nil)
         {
             [self showAuthenticationDialogWhenReasonable: viewController
         }
         else if (localPlayer.isAuthenticated)
         {
             [self authenticatedPlayer: localPlayer];
         }
         else
         {
             [self disableGameCenter];
         }
     }];
}

これをアプリの delegate.m ファイルにコピーしましたが、気に入らず、 [self showAuthenticationDialogWhenReasonable: viewController } の後に ] を期待するなどのエラーが表示されます。

iOS 6 でゲーム センターのユーザーを認証する方法を教えてください。

4

3 に答える 3

2

GameKit の紹介を得るために、Apple から入手できるサンプルがあり ます

あなたのコードでは、終了の "]" がありませんが、もちろん、gameCenter に接続するには、この関数以上のものが必要です。サンプルの 1 つから始めることをお勧めします。

于 2012-10-11T07:21:00.567 に答える
1

Apple は間違ったコード、]; を投稿しました。コードの終わりに向かって、この行の最後に属します [self showAuthenticationDialogWhenReasonable: viewController

これはメソッド authenticateLocalPlayer が Gamekit 内でどのように機能するかを説明しているだけなので、このコードは必要ありません。

于 2013-05-17T04:12:36.547 に答える
0

非推奨のメソッドを使用せずに行ったことは次のとおりです。

以下の関数を呼び出して、認証ハンドラーを AppDelegate ですぐに設定します (私はそれをシングルトン ヘルパー オブジェクトに入れました)。現時点では、ログイン ビュー コントローラを表示するためのビュー コントローラがないため、認証が失敗し、ハンドラーがビュー コントローラを提供した場合は、それを保存してください。これは、ユーザーがログインしていない場合です。

- (void)authenticateLocalUserNoViewController {
    NSLog(@"Trying to authenticate local user . . .");

    GKLocalPlayer *_localPlayer = [GKLocalPlayer localPlayer];
    __weak GKLocalPlayer *localPlayer = _localPlayer;  // Avoid retain cycle inside block
    __weak GCHelper *weakself = self;
    self.authenticationViewController = nil;

    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
    {
        if (viewController) {
            NSLog(@"User not logged in");
            weakself.authenticationViewController = viewController; // save it away
        } else if (localPlayer.authenticated) {
            [[GKLocalPlayer localPlayer] unregisterListener:self];
            [[GKLocalPlayer localPlayer] registerListener:self];
            NSLog(@"Local player %@ (%@) authenticated.  ID = %@",localPlayer.alias, localPlayer.displayName, localPlayer.playerID);
        } else {
            // Probably user cancelled the login dialog
            NSLog(@"Problem authenticating %@", [error localizedDescription]);
        }
    };

}

次に、メイン画面が読み込まれ、ユーザーがボタンを押してオンライン ゲームを開始したくなったら、先ほど隠しておいたログイン ビュー コントローラーを提示します。これをヘルパークラスの別のメソッドに入れました。ユーザーがログインすると、元の認証ブロックの実行がトリガーされますが、viewcontroller パラメーターは nil になります。

-(BOOL) showGameCenterLoginController:(UIViewController *)presentingViewController {
    if (self.authenticationViewController) {
        [presentingViewController presentViewController:self.authenticationViewController animated:YES completion:^{
                }];
        return YES;
    } else {
        NSLog(@"Can't show game center view controller!");
        return  NO; // Show some other error dialog like "Game Center not available"
    }

}
于 2014-08-29T20:15:02.637 に答える