Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何验证玩家当前是否已登录(或登录)到iOS游戏中心?_C#_Ios_Xamarin_Xamarin.ios_Game Center - Fatal编程技术网

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游戏中心吗?


我所做的工作如下:

我有下面的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()”。。。但是,没关系。让我继续根据你的方法和你的好建议做更多的研究。。。谢谢