Поскольку сеанс обратного вызова GKGameSessionEventListener: didAddPlayer: запускается только в том случае, если игра уже запущена, чтобы вы могли обрабатывать этот обратный вызов каждый раз, когда требуется работа. Я тестировал это, и он работает.
Когда вы отправляете приглашение iMessage или электронной почты в игру, не включайте URL-адрес приглашения в сеанс игры непосредственно в сообщении. Вместо этого используйте зарегистрированный URL-адрес, который откроет ваше приложение при открытии на устройстве, на котором установлено ваше приложение. Проверьте здесь, чтобы посмотреть, как:
Complete Tutorial on iOS Custom URL Schemes
Но добавить процент спасся кодирование игр приглашают URL в качестве параметра этого URL Thusly (я предполагаю регистрацию URL, напримерnewGameRequest, но лучше всего сделать это совершенно уникальным или даже лучше - хотя для этого требуется больше настроек, попробуйте Universal Link Support, так как это позволит вам направить пользователей, у которых нет вашего приложения, установленного на веб-странице со ссылкой для загрузки)
let openOverWordForPlayerChallenge = "newGameRequest://?token="
gameState.gameSession?.getShareURL { (url, error) in
guard error == nil else { return }
// No opponent so we need to issue an invite
let encodedChallengeURL = url!.absoluteString.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
let nestedURLString = openOverWordForPlayerChallenge + encodedChallengeURL!
let nestedURL = URL(string: nestedURLString)!
}
отправьте URL-адрес в сообщении или электронной почте или WhatsApp или что-то еще. Затем в делегат своего приложения, добавьте следующее:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
var success = false
if let queryString = url.query {
if let urlStringToken = queryString.removingPercentEncoding {
let token = "token="
let startIndex = urlStringToken.startIndex
let stringRange = startIndex..<urlStringToken.index(startIndex, offsetBy: token.characters.count)
let urlString = urlStringToken.replacingOccurrences(of: token, with: "", options: .literal, range: stringRange)
if let url = URL(string: urlString) {
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
success = true
}
}
}
}
return success
}
Теперь вы можете быть уверены, что сеанс: didAddPlayer: будет называться. Что такое ставки, этот рабочий стол хорош около 2 недель, и они исправляют это в следующей версии iOS, представленной на WWDC 2017! Обновление: эта проблема не была исправлена - так что обходной путь выше по-прежнему хорош!
Привет, Шон, не могли бы вы принять мой ответ? Я думаю, что это самое близкое вам решение. Это хороший способ обхода. – TheBasicMind