我正在尝试将 Game Center 支持添加到我们的游戏中。它已经支持 OpenFeint,但我们也想支持 GC。
基本的身份验证和使用非常简单,而且似乎工作得很好(除了沙箱非常不稳定)。但是,由于我们的架构,我们希望将 GC 主要用于挑选 friend ,而不是使用完整的邀请支持。所以,我正在寻找一种方法来使用像 GKMatchmakerViewController 这样的东西来只挑选 friend ,而不是向他们发送邀请。我想显示玩家可以选择 friend 然后只返回选择的 friend 的普通 View ,我不希望 View /GC 向选择的 friend 发送任何东西。
GKMatchmakerViewController * mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = my_delegate;
mmvc.hosted = YES;
根据文档,这应该调用我的委托(delegate)的 didFindPlayers 方法,但它似乎不起作用。托管标志没有任何效果,无论有没有它 GC 似乎试图向选择的 friend 发送一些东西,然后在 UI 中短暂地显示一个文本不兼容并忽略选择的 friend 。
我在这里做一些根本错误的事情还是我想做的事情是不可能的?不兼容错误实际上是什么意思?我在两个都有沙盒用户登录的 iPad 之间运行。在不通知他们的情况下挑选 friend 真的可能吗?
编辑:
当我尝试选择 friend 时,GKMatchmakerViewController 显示的不兼容消息很奇怪。我没有找到任何关于它可能意味着什么以及可能导致它的文档。一个简单的猜测是 GC 以某种方式认为沙盒用户安装了我的游戏的不同版本,并且这些版本不兼容。这个游戏是 已在应用商店中提供,但没有 GC 网络。沙盒环境能以某种方式从中获取一些信息吗?但是,没有在垫子上安装旧版本的游戏。
最佳答案
对于那些仍然遇到这个问题的人。查看您的构建阶段,运行脚本部分。就我而言,我使用了其中一个自动增加内部版本号的脚本,这是跟踪此类事情的一种常见做法。但是,Game Center 不会接受这种方法。该脚本实际上采用 CFBundleVersion 并将其增加 1(有多种技术,我使用的技术只是 +1)。
#!/bin/bash
buildPlist=${INFOPLIST_FILE}
CFBundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $buildPlist)
CFBundleVersion=$(($CFBundleVersion + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
所以我在 iPhone 上安装 build,它的 build 号是 295,然后我在 iPad 上安装它,它有 296 build 版本,与 bundle 版本相同。从 Game Center 的角度来看,这两个版本是不兼容的。
尝试邀请 friend 时,普通(即时)多人游戏模式只会显示“不兼容”。回合制模式根本不会显示任何有用的东西。
整个事情令人困惑,因为在 Game Center 兼容性列表中的 iTunesConnect 上,它显示了短版本字符串(CFBundleShortVersionString),所以我假设只要我在项目设置的“版本”字段中输入相同的值,它就会起作用。但是,“构建”也必须相同。
关于iOS 和游戏中心 - 为托管游戏挑选 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470309/