1

アプリの新しいバージョンに取り組んでいます。しばらくサンドボックスを普通に使っていましたが、今ではすべてのデバイスが非常に奇妙な問題で立ち往生しています。ゲームセンターに途中までログインしているようです。彼らには機能しませんが、ログアウトすることもできません。これが私の認証方法です:

- (void)authenticateLocalPlayer {
    GKLocalPlayer* localPlayer = WJLocalPlayer;
    WJLog(@"Authenticating local user...");
    if (localPlayer.authenticated == NO) {
        localPlayer.authenticateHandler = ^ (UIViewController* vc, NSError *error) {
            if (error) {
                WJLog(@"Authentication failed! %@", [error localizedDescription]);
            }
            else {
                WJLog(@"Authentication succeeded!");
                NSString* name = [GKLocalPlayer localPlayer].displayName;
                WJLog(@"display name is %@", name);
                NSString* alias = [GKLocalPlayer localPlayer].alias;
                WJLog(@"alias is %@", alias);
                GKTurnBasedEventHandler *ev = [GKTurnBasedEventHandler sharedTurnBasedEventHandler];
                ev.delegate = self;
            }
        };
    }
}

そして、これがログステートメントから私が見ているものです[WJLogはゴミのないNSLogの私自身のバージョンです]:

Authenticating local user...
Authentication succeeded!
display name is Me
alias is (null)

Game Center アプリでログインまたはログアウトできます。違いはありません。上はいつも見てます。デバイスの 1 つを工場出荷時の設定に戻そうとさえしました。結果はまだ同じでした。また、新しいバージョンのアプリのゲーム センターを無効にして再度有効にしようとしました。それでも同じ結果です。

何か案は?

4

1 に答える 1

3

UIViewController パラメータを完全に無視しています。これが存在する場合はユーザーに提示して、ログインできるようにする必要があります。おそらく、サンドボックス以外のゲームセンターにログインしたため、これを経験しているだけであり、アプリを実行すると、アプリが尋ねたいと考えています。サンドボックスの資格情報を入力しますが、代わりに、認証されていると想定しています。

ここにもいくつかの問題があります。

  • アプリの起動直後に、authenticateHandler を 1 回だけ設定する必要があります。

  • localPlayer.authenticated は、authenticateHandler 内で確認する必要があります。これは、有効であることが保証されている唯一の場所であるため、他の場所では確認しないでください。具体的には、バックグラウンドから再開した後、authenticateHandler が再度呼び出されるまでは意味のない値です。他の場所で必要な場合は、起動時と applicationWillEnterForeground メソッドで false に初期化され、localPlayer が実際に認証されていると判断した場合にのみ、authenticateHandler 内で true に設定されるグローバル変数を使用します。

  • エラーを確認して必ずログに記録しますが、実際に認証が成功したかどうかは何もわかりませんので、「else」を削除します。

こちらのドキュメントをご覧ください。

于 2013-03-07T05:11:07.317 に答える