GKGameSessionEventListenerコールバックセッション:didAddPlayer:ゲームが既に実行されている場合のみ起動します。回避策が必要なたびにこのコールバックを処理できることを確認してください。私はこれを試して、それは動作します。
iMessageを送信するか、ゲームに招待する電子メールを送信するときは、メッセージにGame Session Invite URLを直接含めないでください。代わりに、アプリがインストールされている端末で開いたときにアプリを開く登録済みのURLを使用してください。
Complete Tutorial on iOS Custom URL Schemes
しかしパーセントを追加し、ゲームのエンコーディングは以下のようなものを、このURLにパラメータとしてURLを招待エスケープ(私は例えば、URLの登録を仮定している:どのように見るにはこちらをチェックnewGameRequestを使用することができますが、これは非常にユニークで、さらに優れたものにするのが最善です。より多くの設定が必要ですが、Universal Link Supportを試してください。これにより、あなたのアプリをインストールしていないユーザーをダウンロードリンクでWebページに誘導できます)
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)!
}
メッセージやメール、WhatsAppなどでURLを送信します。次に、あなたのアプリケーションデリゲートに以下を追加してください:
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
}
これで、session:didAddPlayer:が呼び出されます。このワークアラウンドの賭けは約2週間有効で、WWDC 2017で展示されたiOSの次のリリースでこれを修正します!アップデート:この問題は修正されていないため、上記の回避策は良好なままです!
こんにちはショーン、あなたは私の答えを受け入れることができますか?私はこれがあなたが解決策に近づくことに最も近いと思います。これは良い回避策です。 – TheBasicMind