我正在尝试了解Game Center并编写了一个小的实现,当我将其部署到我的iPhone5(运行iOS7)时似乎可以工作。但是,当我运行相同的代码(调试部署)到我的iPhone 6+(iOS8.3)或iPad(iOS8.3)时,根本不会进行身份验证。即使我在运行代码之前使用沙盒帐户登录Game Center,它仍然无法识别我已登录!
我正在使用Xamarin,所以代码是c#..
这是验证码:
public static void setAuthenticateHandler()
{
if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0))
{
GKLocalPlayer.LocalPlayer.AuthenticateHandler = (ui, error) =>
{
if (ui != null)
{
GameCenterManager._controller.PresentViewController(ui, true, null);
}
else if (GKLocalPlayer.LocalPlayer.Authenticated)
{
if (currentPlayerID != null || currentPlayerID != GKLocalPlayer.LocalPlayer.PlayerID)
currentPlayerID = GKLocalPlayer.LocalPlayer.PlayerID;
if (AfterAuthentication != null)
AfterAuthentication();
}
else
{
var alert = new UIAlertView("Game Center Account Required", "Login to the game center!", null, "Retry", null);
alert.Clicked += (sender, e) =>
{
//GKLocalPlayer.LocalPlayer.Authenticated();
};
alert.Show();
}
};
}
else
{
var authenticatedHandler = new Action<NSError> ((error) => {
if (GKLocalPlayer.LocalPlayer.Authenticated)
{
if (currentPlayerID != null || currentPlayerID != GKLocalPlayer.LocalPlayer.PlayerID)
currentPlayerID = GKLocalPlayer.LocalPlayer.PlayerID;
if (AfterAuthentication != null)
AfterAuthentication();
}
else
{
var alert = new UIAlertView("Game Center Account Required", "Login to the game center!", null, "Retry", null);
alert.Clicked += (sender, e) =>
{
setAuthenticateHandler();
};
alert.Show();
}
});
GKLocalPlayer.LocalPlayer.Authenticate(authenticatedHandler);
}
}
几个问题:
如果iOS是主要版本6或更高版本,我认为UIDevice.CurrentDevice.CheckSystemVersion(6, 0)
调用只返回true?
我可以多次运行这个静态方法 - 知道在指定AuthenticateHandler后它会立即执行游戏中心检查吗?
现在对于 MAIN ISSUE - 在模拟器(iOS8.2)的调试中运行时,一切正常,如果我没有登录,则调用GameCenterManager._controller.PresentViewController(ui, true, null);
GC尚未 - 所以一切都好。同样在我的iPhone5(iOS7)上运行良好,如果我已经登录,则调用GKLocalPlayer.LocalPlayer.Authenticated
。但是,在我运行iOS8.3的其他设备上,它会直接跳到警报窗口,无论我是否已经登录,都会直接跳到警报窗口。
注意:我读过有人建议在我的设置中打开Sandbox开关 - &gt; GameCenter - &gt; Sandbox但是我的iphone 5,6 +和ipad上没有它 - 它不在那里吗?...
任何帮助都非常感激 - 这让我疯了!