cocoa - 在 OSX 上实现 GameKit.framework,无法验证 localPlayer

标签 cocoa gamekit

我正在尝试在我的 OSX 游戏中实现 GameKit。不幸的是我找不到很多关于如何做到这一点的信息;所有教程似乎都是 iOS 版(尽管 the documentation clearly states “Game Center 可在 iOS 和 OS X 上使用”)。

一切都编译良好;当我尝试对本地用户进行身份验证时出现问题:

    [[GKLocalPlayer localPlayer] setAuthenticateHandler:^(id viewController, NSError *error) {
        if(error) {
          DLog(@"Error: %@",error);// This is always returning an error
        }
        else if(viewController) {
          // WHAT DO I DO HERE??
        }
      }];

我有两个问题:

首先,处理程序总是收到错误:Error Domain=GKErrorDomain Code=6“请求的操作无法完成,因为本地玩家尚未经过身份验证。” UserInfo=0x10103bc70 {NSLocalizedDescription=无法完成请求的操作,因为本地玩家尚未经过身份验证。}

其次,我不知道如何呈现 View Controller 。

在 iPhone 上,此代码运行良好:没有错误,我只需呈现 viewController(这是登录屏幕)。

最佳答案

很抱歉,我意识到我的回答迟了将近一年,但以防万一它仍然与像我这样仍在问这个问题的其他人相关。艾德·马蒂大部分是正确的,但我发现对我有用的是这个。

[[GKLocalPlayer localPlayer] setAuthenticateHandler:^(NSViewController < GKViewController >  viewController, NSError *error) {

          if(error) {
             NSLog(@"Error: %@",error);
          }
          else if(viewController) {
            GKDialogController *presenter = [GKDialogController sharedDialogController];
            presenter.parentWindow = myWindow;
            [presenter presentViewController:viewController];
         }
}];

主要区别是使用符合GKViewController的NSViewController而不是id。(另外,我使用NSLog而不是DLog,但这并不是太重要)。

“但是,我发现这完全没用,它甚至在调用处理程序之前就显示登录对话框。”

为确保其正常工作,请通过您的应用设置一个新的 Game Center 帐户。当您运行程序并加载一个窗口供您登录时,即使您已经有 Apple ID,也请按“创建新 Apple ID”。该按钮可能不起作用,因此如果是这种情况,请打开 Game Center 并按“创建新 Apple ID”。无论哪种方式,您的目标都是创建一个“沙盒”游戏中心帐户,您可以在此处了解更多信息:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/TestingYourGameCenter-AwareGame/TestingYourGameCenter-AwareGame.html#//apple_ref/doc/uid/TP40008304-CH17-SW1

如果您在阅读条款和条件时,左上角的黄色横幅上出现“沙盒”一词,则可以判断该帐户是否已沙盒化。再次抱歉,我迟到了,但希望这能为所有 future 的观众澄清这个话题。

附注很抱歉,代码格式不正确。

关于cocoa - 在 OSX 上实现 GameKit.framework,无法验证 localPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862161/

相关文章:

cocoa - Mac OS X 上的 CORBA (Cocoa)

swift - 在 URL 中用波浪号替换用户路径

ios - 当用户关闭然后重新打开游戏时,游戏中心如何管理比赛?

objective-c - GKTurnBasedMatch 参与者不正确/重复

ios - 有没有办法在不发送 "Your Turn"推送通知的情况下更新 GKTurnBasedMatch 中的 matchData?

ios - 游戏中心在 iPhone 模拟器中工作,但在 iPad 上不工作 - Swift 4

objective-c - 如何在 NSCollectionView 中绘制 bezierPath?

objective-c - 从 CoreData 中删除所有对象后,NSArrayController 一直为空

objective-c - 如何使用 `NSControl` 和 `NSActionCell` 编写自定义控件

ios - 玩家放弃 GKTurnBasedMatch