2017-02-28 56 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

你可以嘗試保存在按鈕點擊時在userDefault中輸入名稱,然後檢查您的userDefault鍵是否在嘗試重新登錄後保存了任何用戶名。 –

+0

@TusharSharma我對你的意思很抱歉有點困惑。今天剛開始使用GameCenter。我很熟悉保存數據,雖然 – Brejuro

+0

我mwan說當你的用戶登錄時,你可以保存它的狀態。如果它再次登錄,則再次檢查它,然後相應地創建您的條件。 –

回答

1

要了解您所看到的行爲,我們需要了解身份驗證過程如何工作。

它在您設置身份驗證處理程序時開始。這是告訴您的應用嘗試與Game Center對話的信號。認證處理程序的完成模塊有三種可能的情況:

  1. 錯誤:出事了
  2. 接收一個視圖控制器:登錄視圖控制器告訴各位玩家是不是在
  3. 接收零視圖控制器記錄:缺少錯誤+缺少視圖控制器會告訴您玩家已經登錄。

儘管IOS可能知道您的登錄狀態(或嘗試使用緩存信息來僞造您的登錄狀態),但您的應用當你退出時會丟失上下文。當您再次啓動時,沒有嘗試設置身份驗證處理程序,因此在用戶按下按鈕之前不會嘗試驗證身份驗證狀態,因此您的應用程序不知道用戶是否已登錄。

我認爲下面的方法將變得相當接近你在找什麼:

  • 設置認證處理程序,並儘可能早地在你第一次的viewController的viewDidLoad啓動認證。儘早按照您的啓動順序進行操作。
  • 如果用戶未通過身份驗證,您將收到一個登錄視圖控制器。不要呈現它。相反,保存它。除非用戶按下按鈕,否則不要呈現它。
  • 如果用戶已經登錄時,他們將看到儘快迎回消息隨着比賽的開始,你就可以繼續進行,因爲用戶是仍然登錄。
相關問題