我在尝试将游戏中心成就应用到 iOS 游戏中时遇到一些问题。该游戏已经进行了玩家身份验证和排行榜设置,并且运行良好。我遇到的第一个错误是使用此方法时:
GKAchievementDescription.loadAchievementDescriptionsWithCompletionHandler
它给了我一个错误,其中指出了两件事:
- “由于与服务器通信时出现错误,无法完成请求的操作。”
- “应用不支持成就。”
iTunes connect 中已添加五项成就,所以我不明白为什么它说不支持它们。其他问题是当我使用此方法时:
GKAchievement.reportAchievements
当调用此方法时,完成处理程序中的错误为 nil,但它返回“没有 bundle ID:(null)”。成就横幅不会显示,游戏中心 View 中也没有成就选项卡。
该应用程序最近已转移给另一位开发人员,但他随后希望添加一些额外的功能,因此我使用他提供的配置文件和开发人员证书,以便我可以正确测试游戏中心和应用程序内购买。我遇到的问题似乎与传输有关?
所以我的问题是导致游戏“不支持成就”的问题可能是什么?
任何帮助将不胜感激, 谢谢。
最佳答案
你的问题有点模糊,这两种方法在你的代码中看起来怎么样。一个函数的两行很难帮忙
您加载的代码应该如下所示
/// Load achievements
func loadAchievements(){
print("Loading submitted achievements")
GKAchievement.loadAchievementsWithCompletionHandler( { (achievements, error:NSError?) -> Void in
guard error == nil else {
print("Error loading achievements progress: \(error)")
return
}
guard let validAchievements = achievements else { return }
for achievement in validAchievements {
print("Name: \(achievement.identifier)")
print("Percentage: \(achievement.percentComplete)")
print("Date: \(achievement.lastReportedDate)")
self.achievementsDict.updateValue(achievement, forKey: achievement.identifier!)
}
})
}
您的报告代码应如下所示
/// Save achievement progress
func reportAchievementProgress(percent: Double, achievementID: String) {
guard self.localPlayer.authenticated else { return }
let achievement = self.checkAchievement(achievementID) as GKAchievement? //
if achievement != nil {
achievement!.percentComplete = percent
achievement!.showsCompletionBanner = true
GKAchievement.reportAchievements([achievement!], withCompletionHandler: { (error:NSError?) -> Void in
guard error == nil else {
print(error)
return
}
print("Reported achievement: \(achievementID)) to: \(percent) %")
})
}
}
/// Check achievement
private func checkAchievement(achievementID: String) -> GKAchievement {
var achievement = self.achievementsDict[achievementID]
if achievement == nil {
print("Achievement with no previous progress, saving...")
achievement = GKAchievement(identifier: achievementID)
self.achievementsDict.updateValue(achievement!, forKey: achievement!.identifier!)
}
return achievement!
}
achievementsDict 是一个字典,您可以在其中缓存您的成就。
var achievementsDict = [String: GKAchievement]()
这有帮助吗?
关于ios - 不支持游戏中心成就,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151873/