C# 如何验证玩家当前是否已登录(或登录)到iOS游戏中心?
有人能给我看一个用C语言编写的示例代码,检查玩家当前是否登录(或登录)到iOS游戏中心吗?C# 如何验证玩家当前是否已登录(或登录)到iOS游戏中心?,c#,ios,xamarin,xamarin.ios,game-center,C#,Ios,Xamarin,Xamarin.ios,Game Center,有人能给我看一个用C语言编写的示例代码,检查玩家当前是否登录(或登录)到iOS游戏中心吗? 我所做的工作如下: 我有下面的C#方法,当玩家点击我游戏上的“游戏中心”按钮时,会弹出iOS游戏中心窗口: void ShowGameCenter () { GKGameCenterViewController controller = new GKGameCenterViewController (); controller.Finished += (o
我所做的工作如下: 我有下面的C#方法,当玩家点击我游戏上的“游戏中心”按钮时,会弹出iOS游戏中心窗口:
void ShowGameCenter ()
{
GKGameCenterViewController controller = new GKGameCenterViewController ();
controller.Finished += (object sender, EventArgs e) => {
controller.DismissViewController (true, null);
};
AppDelegate.Shared.ViewController.PresentViewController (controller, true, null);
}
这种方法的工作原理如下:如果玩家当前登录到Game Center,则此方法会弹出真正的iOS“Game Center”,如果玩家当前未登录,则此方法会弹出一个警告对话框,显示“Game Center不可用。玩家未登录”
然而,不幸的是,此方法不返回指示玩家当前是否登录到游戏中心的标志或布尔值。此标志或布尔值是我需要在游戏的其他部分使用的。
因此,我在谷歌上搜索“GKGameCenterViewController”,并注意到iOS已经定义了这些GKErrorCode常量:
enum {
GKErrorUnknown = 1,
GKErrorCancelled = 2,
GKErrorCommunicationsFailure = 3,
GKErrorUserDenied = 4,
GKErrorInvalidCredentials = 5,
GKErrorNotAuthenticated = 6,
GKErrorAuthenticationInProgress = 7,
GKErrorInvalidPlayer = 8,
GKErrorScoreNotSet = 9,
GKErrorParentalControlsBlocked = 10,
GKErrorPlayerStatusExceedsMaximumLength = 11,
GKErrorPlayerStatusInvalid = 12,
......
}
但是,我不知道这些常量中的哪一个对应于“未登录游戏中心的用户”,我也不知道如何将此错误标志用于我的应用程序
以下是指向Apple开发者教程网页的链接,其中包含有关GKGameCenterViewController的信息:
以下是苹果开发者教程网页的链接,该网页描述了gkerrocode:
事实上,我甚至不认为我的原始C#方法在我的特定场景中适用。原因是该方法会弹出真正的iOS游戏中心或警告对话框,显示“游戏中心不可用。玩家未登录”。我需要的是另一种方法,不弹出这两个窗口中的任何一个,并且悄悄地向我返回一个标志或布尔值,以通知我玩家当前是否登录到iOS Game Center 你认为你可以给我看一些其他的代码样本来完成我想要的吗?(同样,如果您能用C#向我展示代码,我将不胜感激,因为我正在使用Xamarin开发iOS游戏,而我无法理解Objective-C。)
非常感谢。在GameKit中始终有一名本地玩家,但他们当前可能未登录:
var gameStartButton = new UIButton(UIButtonType.System);
gameStartButton.Frame = new CoreGraphics.CGRect(40, 40, 100, 40);
gameStartButton.SetTitle("Start Game", UIControlState.Normal);
gameStartButton.TouchUpInside += (object sender, EventArgs e) =>
{
GKLocalPlayer.LocalPlayer.AuthenticateHandler = async (UIViewController uiViewController, Foundation.NSError error) =>
{
if (uiViewController != null)
{
await PresentViewControllerAsync(uiViewController, true);
}
if (GKLocalPlayer.LocalPlayer.Authenticated)
{
Console.WriteLine($"{GKLocalPlayer.LocalPlayer.PlayerID} : {GKLocalPlayer.LocalPlayer.Authenticated}");
Console.WriteLine("Call a start game method...");
}
else
{
// no auth'd user, can your game use an anonymous one?
var localPlayer = GKLocalPlayer.GetAnonymousGuestPlayer("StackOverflow");
Console.WriteLine($"{localPlayer.PlayerID}");
}
};
};
Add(gameStartButton);
GKLocalPlayer类是GKPlayer的一个特殊子类,表示在设备上运行游戏的经过身份验证的玩家。在任何给定的时间,设备上只能对一名玩家进行身份验证;此玩家必须先注销,其他玩家才能登录
参考:
注意:请记住,iOS 10将从手机中删除游戏中心应用程序,因此现在开发者有责任提供
GKGameCenterViewController
或实现界面并提供您自己的定制版本。谢谢您的回答。我刚刚试过你的代码,但除非我犯了一些错误,否则你的方法似乎不起作用。。。在我的测试用例中,无论我当前是否登录到Game Center,代码总是转到方法中的“//允许用户创建帐户/登录:即GKGameCenterViewController”行。你有什么建议吗?谢谢。@than我是从内存中完成的,GKLocalPlayer
是一个单例,我用一个异步样式的示例更新了我的代码,使用应用程序内的AuthenticateHandler
在需要时显示GameCenter
登录。。。请确保您的应用程序已在Apple注册,否则在尝试登录时会出现错误对话框。您写道“iOS 10将从手机中删除游戏中心应用程序”。请告诉我用户是否仍然可以通过iPhone上的“设置”应用程序手动登录游戏中心?(维基说“设置”应用程序仍然包含“游戏中心”按钮,但我还不确定……)从我在测试版中看到的情况来看,“设置”中的游戏中心仍然存在,因为这将是用户注销/切换用户的一种方式(假设旧游戏没有该功能)。只有GC应用程序正在消失,因此开发人员需要向用户展示成果。。。当然这是测试版,所以请继续跟踪。我尝试了你的新方法。不幸的是,它没有编译,因为它抱怨它不知道函数“PresentViewControllerAsync()”。。。但是,没关系。让我继续根据你的方法和你的好建议做更多的研究。。。谢谢