【问题标题】:Game Center achievements not supported不支持 Game Center 成就
【发布时间】:2016-03-13 03:16:00
【问题描述】:

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

GKAchievementDescription.loadAchievementDescriptionsWithCompletionHandler 

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

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

五个成就已添加到 iTunes 连接,所以我不明白为什么它说它不支持它们。其他问题是当我使用这种方法时:

GKAchievement.reportAchievements

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

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

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

任何帮助将不胜感激, 谢谢。

【问题讨论】:

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


    【解决方案1】:

    您的问题有点含糊,这两种方法在您的代码中看起来如何。两行函数很难帮助

    你加载的代码应该是这样的

     /// 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]()
    

    这有帮助吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多