2013-03-12 14 views
11

這裏的邏輯流,我試圖代碼到我的iPhone應用程序:正確的流量登錄用戶從iOS應用到遠程API

enter image description here

我想我明白了技術性實現這一目標(使用AFNetworking,使用Devise連接到Rails API作爲身份驗證)。一旦登錄成功,auth_token將存儲在鑰匙串中。我無法弄清楚的是設置我的應用的行爲如上所述的最佳方式。

我想經驗是良好的,當然用戶,所以也許當它檢查單詞和嘗試登錄它顯示了某種形式的「加載」屏幕。

我該如何去實現這一目標?我不知道我應該在AppDelegate中設置哪個視圖控制器作爲rootviewcontroller,或者我應該如何在用戶登錄後設置它。我已經在Facebook應用程序中嘗試了這一點,當我打開它時,我看到一個空白的導航控制器它似乎,然後我的個人資料視圖加載。他們在幕後做了什麼,這是最好的方式嗎?

我不使用故事板。

回答

9

我實現了一個類似的之一,RootViewController的是一個navigationController一個「SplashViewController」,呈現出漂亮的標誌,活動的指標並給出了驗證用戶身份的信息。它擁有在那裏檢查存儲的令牌和認證實現的邏輯。如果認證成功,則通過推送到navigationController堆棧來顯示ShowUserController。

如果認證失敗LoginViewController有模式呈現。 SplashViewController實現了LoginViewController的委託,它只是將用戶名和密碼傳遞給SplashViewController。在成功登錄時,LoginViewController被解除,用戶被定向到ShowUserController。

+0

我去了這條路線。我創建了一個PathFinderViewController,可以在應用程序加載時設置rootViewController。這檢查去哪裏。如果我需要登錄,我會以模態方式顯示登錄屏幕並嘗試登錄。如果成功,我將取消登錄屏幕並將rootViewController更改爲UserViewController。如果PathFinder發現Auth_Token有效,則只需將rootViewController更改爲UsersViewController。謝謝! – sbonkosky 2013-03-13 15:46:43

+0

@sbonkosky很高興幫助你:)。順便說一句,你是如何創建流程圖的? – Anupdas 2013-03-13 15:57:10

+0

我使用了[LucidChart](http://www.lucidchart.com/) – sbonkosky 2013-03-13 16:01:11

4

與根控制器作爲一個用戶將看到他們在成功登錄後啓動的應用程序,那麼層登錄意見/控制器之上,與模態電話。如果身份驗證成功,您的用戶將已經到達他們想要的位置,否則您會以模態方式在頂部調用登錄圖層。一旦他們通過身份驗證,您將不再需要登錄視圖。

+0

但是,如果用戶的數據連接速度較慢,並且檢查auth_token是否有效需要幾秒鐘,我該怎麼辦?在此期間我會展示什麼? – sbonkosky 2013-03-12 03:15:16

+0

您可以放置​​任何你喜歡的模態視圖。使用微調控制器和一些文本消除令牌驗證完成時的模式視圖。例如,放置根控制器,而不是使用微調控制器的模式「加載...」視圖,直到認證完成。如果不好,請關閉微調器視圖,並設置登錄視圖。如果它是好的,那麼就放棄微調視圖。從根視圖控制器控制所有這一切使您的生活變得更簡單。 – 2013-03-12 13:19:54

+0

這就是我見過的Facebook的SDK工作。 – 2014-02-25 18:13:38

2

爲了詳細說明@Owen哈奈特的答案,因爲這個文本將不適合在評論;這就是我看過Facebook的SDK的工作。如果您構建的應用程序使用Facebook iOS SDK作爲唯一的登錄機制,則其工作方式如下所示:

在我的應用程序代理的didFinishLaunchingWithOptions方法中,我首先檢查「已存在文件」訪問令牌,NSUserDefaults。如果找不到,我需要獲取一個,因此我的應用程序委託會立即啓動一個模式登錄流程,並以有效訪問令牌結束,然後保存到NSUserDefaults以供下一個應用程序打開使用。

如果我在我的didFinishLaunchingWithOptions文件中已經有訪問令牌,那麼我會假設開心路徑並使用我在應用程序打開時在文件中找到的訪問令牌異步打開「登錄的用戶會話」。如果我在文件中打開會話的訪問令牌是合法的,則不顯示UX。如果我在文件中的訪問令牌是非法訪問令牌(例如,服務器說它太舊了),那麼我的應用程序委託中的打開會話方法會在找到該令牌時顯示適當的模式登錄流。

由於此的openSession方法異步執行,你可能想知道你的根視圖控制器,需要登錄的用戶,又是怎麼回事在此期間發揮作用。

答案是它應該被寫爲好像它確實有登錄用戶。它應該假設。如果它運行的代碼由於沒有有效的訪問令牌而無法運行或者成功執行,那麼該代碼應該觸發登錄UI (如果它尚未提供)(即應用程序打開時的訪問令牌檢查,由這一次已經向用戶展示了模式登錄界面)。

最後,這是Facebook SDK登錄流程的翻譯版本。例如,如果您只使用他們的SDK,就不會像我建議的那樣與NSUserDefaults連接。我已將他們的流轉換爲登錄到遠程API的「自定義實現」。