游戏中心的成就不受支持

时间:2015-12-08 09:10:17

标签: ios swift itunesconnect game-center achievements

我在尝试将游戏中心成就实现到iOS游戏时遇到了一些问题。游戏已经有玩家认证和排行榜设置,他们工作正常。我得到的第一个错误是使用这种方法:

GKAchievementDescription.loadAchievementDescriptionsWithCompletionHandler 

它给了我一个错误,其中说明了两件事:

  1. "由于与服务器通信时出错,无法完成请求的操作。"
  2. " App不支持成就。"
  3. iTunes连接已经增加了五项成就,所以我不知道它为什么不支持它们。其他问题是我使用这种方法时:

    GKAchievement.reportAchievements
    

    当调用它时,完成处理程序中的错误为nil,但它返回"没有bundleID的束:(null)"。成就横幅没有显示,游戏中心视图中没有成就标签。

    该应用程序最近被转移到另一个开发人员,但他后来想要添加一些额外的功能,所以我使用他提供的配置文件和开发人员证书,这样我就可以正确地测试游戏中心和应用程序购买。看来我遇到的问题与转移有关吗?

    所以我的问题是导致游戏“不支持成就”的问题可能是什么?

    非常感谢任何帮助, 谢谢。

1 个答案:

答案 0 :(得分:0)

你的问题有点模糊,这两种方法在你的代码中是如何准确的。很难用两行函数来帮助

您加载代码应该看起来像这样

 /// 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!
}

achievementDict是一个字典,用于缓存您的成就。

var achievementsDict = [String: GKAchievement]()

这有帮助吗?