ios - 不支持游戏中心成就

标签 ios swift app-store-connect game-center achievements

我在尝试将游戏中心成就应用到 iOS 游戏中时遇到一些问题。该游戏已经进行了玩家身份验证和排行榜设置,并且运行良好。我遇到的第一个错误是使用此方法时:

GKAchievementDescription.loadAchievementDescriptionsWithCompletionHandler 

它给了我一个错误,其中指出了两件事:

  1. “由于与服务器通信时出现错误,无法完成请求的操作。”
  2. “应用不支持成就。”

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/

相关文章:

swift - 在 Swift 中将可选字符串转换为可选 Int 的最简单方法

ios - 无法在 ItunesConnect 中创建 App 以进行 Beta 测试

iOS iTunes 会自动裁剪您的图标吗?

ios - 使用现有 Apple 帐户在 iTunes Connect 中添加 Sandbox Tester

ios - Swift:从现有的导航 Controller (如 Facebook 或 Snapchat)推送新的导航 Controller

ios - 获取用于在 Swift 中恢复应用内购买的已购买产品 ID 列表

ios - 我怎样才能使这个 UIBarButtonItem 变粗?

php - 验证 iOS 发送的 PHP 中的自定义 HTTP header

ios - UICollectionView 中的画外音 - 缺少一些翻译

ios - View 层次结构没有为约束准备?