2013-02-19 39 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