Как / может ли GameCenter сохранять в iCloud? - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь сохранить игровые данные на разных устройствах.Я пытаюсь понять, если GameCenter имеет возможность сделать это .. Я читал из документов ..

https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/SavedGames/SavedGames.html

Чтобы предоставить сохраненные игровые данные между устройствами,Разработчики должны создавать свои собственные решения, используя свои собственные серверы или вторичный сервис, такой как Facebook.Используя новые сохраненные игровые методы в классах GKSavedGame, GKLocalPlayer и GKSavedGameListener, разработчики могут легко сохранять игровые данные в iCloud.

Однако, когда я получаю сохраненные игры на отдельных устройствах, я получаю разные результаты.Оба устройства используют одинаковые учетные записи GameCenter и iCloud.Примечание. Когда я удаляю приложение локально на устройстве, я могу получить данные local GameCenter.

   var localPlayer: GKLocalPlayer {
       return GKLocalPlayer.local
   }

  func authenticateLocalPlayer(completion: @escaping((_ gameCenterLoginVC: UIViewController?,_ gameCenterEnabled: Bool ) -> Void)) {
        localPlayer.authenticateHandler = { [weak self] (viewController, error) -> Void in
            guard let self = self else { return }
            if viewController != nil {
                completion(viewController, true)
            } else if self.localPlayer.isAuthenticated {
                self.gcEnabled = true
                self.fetchSavedGames(completion: { (success) in
                    completion(nil, true)
                })
            } else {
                completion(nil, false)
            }
        }
    }

    private func fetchSavedGames(completion: @escaping((_ success: Bool) -> Void)) {
        localPlayer.fetchSavedGames { (savedGames, error) in
            // savedGames here has different results across devices.
            guard let savedGame = savedGames?.sorted(by: { (game1, game2) -> Bool in
                game1.modificationDate ?? Date.init(timeIntervalSince1970: 0) > game2.modificationDate ?? Date.init(timeIntervalSince1970: 0)
            }).first else {
                completion(false)
                return
            }
            savedGame.loadData(completionHandler: { (data, error) in
                guard let data = data, error == nil else {
                    completion(false)
                    return
                }
                User.shared.loadUserWith(data: data)
                completion(true)
            })
        }
    }
...