2

GameCenter Login API 経由でアプリにログインしたいと考えています。

出来ますか ?

Apple game Center ログイン API は公開されていますか?

4

2 に答える 2

1

iOS 6 を使用している場合は、GKLocalPlayer のドキュメントを参照してください。localPlayer の「authenticateHandler」プロパティにブロックを割り当てていることがわかります。これを割り当てると、プレーヤーがまだ Game Center にログインしていない場合、ブロックへの引数の 1 つ (UIViewController *viewController) に、通常の Apple Game Center ログイン画面を表示するビュー コントローラーのアドレスが入力されます。そのアドレスを取得した後、presentViewController:viewController を実行すると、ユーザーには通常の Apple ログイン画面が表示されます。ユーザーが操作を終了すると、「gameCenterViewControllerDidFinish」へのコールバックが返されます。あなたが提供したブロックは複数回実行されるため、プロセスを追跡するのはかなり難しくなりますが、機能します. 価値があるので、私が使用していてうまくいくように見える方法を以下に投稿します。iOS5またはiOS6のいずれかを想定しています。5より前のものには適していません。OS6は、iOS6でYES、それ以外でNOを返すメソッドです。これは公共の消費のために書かれたものではないので、すべてのデバッグ要素とその中の説明のつかない要素を許してください.

-(void) authenticateLocalPlayer {
ANNOUNCE
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
_lastError = nil;

        //iOS 6
if ( [self os6] ) {
    localPlayer.authenticateHandler = ^(UIViewController *loginVC, NSError *error) {
        NSLog(@"in authenticateHandler 1");
        [self setLastError:error];
            //... resume application responses
        [[CCDirector sharedDirector] resume];   //if not paused does nothing 
        if ( [GKLocalPlayer localPlayer].authenticated) {
            NSLog(@"in authenticateHandler 2 - local player is authenticated");
        } else if (loginVC) {
            NSLog(@"in authenticateHandler 3 - local player is not authenticated, will present VC");
                //... pause applications responses
            [[CCDirector sharedDirector] pause];
            [self presentViewController:loginVC];
        } else {
            NSLog(@"in authenticateHandler 4 - local player is NOT authenticated, no VC returned");
        }
        NSLog(@"authenticateHandler error: %@", error.localizedDescription);
    };

        //iOS 5
} else {
    if ( [GKLocalPlayer localPlayer].authenticated == NO ) {
            //no completion handler because we're relying on NSNotificationCenter
        [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
        NSLog(@"local player authentication requested");
    } else {
        NSLog(@"local player was already authenticated");
    }
}

}

于 2012-11-23T16:33:29.233 に答える