2017-02-28 23 views
1

私のゲームでは、アプリケーションの起動時に自動的にGameCenterのログインポップアップが表示されないようにします。代わりに、ユーザーがログインするためにタップできるGameCenterボタンがあります。ボタンを押すと、ログイン画面が表示されます。GameCenter - 既にログインしているユーザー(ログイン済みの場合)

しかし、ログイン後にアプリを再起動すると、ユーザーはまだ「ログインしていません」のようです。彼らはまだボタンをもう一度押す必要があります。毎回ボタンを押さなくても自動的にユーザーを再ログインさせる方法はありますか?私はすでに資格情報を入力しましたが、なぜもう一度認証する必要がありますか?ここで

は、ユーザーがボタンを押したときに、私のコードです:

self.authenticatePlayer() 

そしてここでは、認証方式です:

func authenticatePlayer() { 
     let localPlayer = GKLocalPlayer.localPlayer() 
     localPlayer.authenticateHandler = { 
      (view, error) in 

      if view != nil { 
       self.view?.window?.rootViewController?.presentViewController(view!, animated: true, completion: nil) 
      } else { 

      } 
     } 
    } 

私は、彼らがすでにログインしている場合、ユーザーが戻って歓迎できるものが必要まだログインしていない場合は、ログインを要求しないでください。

+0

あなたは、保存してくださいすることができますボタンclick.andでuserDefaultに名前を入力し、再ログインを試みた後にuserDefaultキーに保存されたユーザー名があるかどうかを確認します。 –

+0

@TusharSharma私はあなたがごめんなさいと少し混乱しています。今日はGameCenterを使い始めました。私はデータを保存するのに慣れていますが、あなたのユーザーがログインしているときにあなたはどこかのステータスを保存することができると言ってくれる人は – Brejuro

+0

です。そして、あなたの状況がそれに応じて作成されたら、もう一度ログインするともう一度チェックしてください。 –

答えて

1

表示されている動作を理解するには、認証プロセスの仕組みを調べる必要があります。

認証ハンドラを設定すると起動します。これは、あなたのアプリにGame Centerとのやり取りを指示するシグナルです。

  1. エラー:認証ハンドラの終了ブロックは、次の3つの条件があり、ログイン・ビュー・コントローラは、プレイヤーが
  2. がnilビューコントローラを受け取るにはログインしていないかを示します:何かが
  3. は、ビューコントローラを受信間違っていました:エラーがない+ビューコントローラがないと、プレーヤーがすでにログインしていることがわかります。

IOSはあなたのログイン状態を知っているかもしれませんが(キャッシュ状態を使ってログイン状態を偽造しようとしているかもしれません)終了時にそのコンテキストを失います。もう一度起動すると、認証ハンドラを設定しようとしていないので、ユーザがボタンを押すまで認証ステータスを確認しようとしません。したがって、あなたのアプリはユーザがログインしているかどうかを知りません。

私は次のようなアプローチは、あなたが探しているものにかなり近い取得すると思います:

  • は、認証ハンドラを設定し、可能な限り早期に、あなたの最初のViewControllerのviewDidLoadで認証を開始します。起動シーケンスでできるだけ早く実行してください。
  • ユーザーが認証されていない場合は、ログインビューコントローラが表示されます。それを提示しないでください。代わりに、それを保存します。ユーザーがボタンを押さない限り、/を提示しないでください。
  • ユーザがすでに彼らは、すぐにゲームを開始するように歓迎バックメッセージが表示され、ユーザーがまだログインしているので、先に進むことができるでしょう、ログインしている場合。
関連する問題