2013-02-19 67 views
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) 

我可以登錄或在遊戲中心應用程序。沒什麼區別。我總是看到上面。我甚至嘗試將其中一個設備恢復到出廠設置。結果仍然是一樣的。我也嘗試禁用和重新啓用我的應用程序的新版本的遊戲中心。仍然是同樣的結果。

任何想法?

回答

3

你完全忽略了UIViewController參數。如果它存在,你應該把它呈現給用戶,以便他們可以登錄。可能你現在才體驗到這一點,因爲你登錄到非沙盒遊戲中心,現在當你運行應用程序時,它想問你爲你的沙盒憑證,但相反,你認爲你是通過身份驗證。

你有一些其他的問題也在這裏:

  • 您應該只設置一次authenticateHandler後不久,你的應用程序啓動。

  • 您應該在authenticateHandler內部以及其他地方檢查localPlayer.authenticated,因爲這是唯一保證有效的地方。具體來說,從背景中恢復並重新調用authenticateHandler之後,這是沒有意義的值。如果你在其他地方需要它,可以使用一個全局變量,它在啓動時以及在applicationWillEnterForeground方法中被初始化爲false,並且只有在確定localPlayer實際經過身份驗證後,纔會在authenticateHandler中設置爲true。

  • 檢查錯誤並通過一切方式記錄它,但它並沒有告訴你任何有關驗證是否真正成功的信息,所以刪除'else'。

看看文檔here

+0

我遇到了一個問題,當我以爲我是,但不是,正確地呈現'viewController'參數。 – 2013-03-25 18:02:25