2013-03-12 32 views
11

Dưới đây là dòng chảy logic tôi đang cố gắng để mã vào ứng dụng iPhone của tôi:dòng Correct để đăng nhập người dùng từ ứng dụng iOS để API từ xa

enter image description here

Tôi nghĩ rằng tôi hiểu được những vấn đề chuyên môn để đạt được điều này (sử dụng AFNetworking, kết nối với một Rails API sử dụng Devise as authentication). Các auth_token sẽ được lưu trữ trong keychain khi đăng nhập thành công. Những gì tôi không thể tìm ra là cách tốt nhất để thiết lập ứng dụng của tôi hoạt động như trên.

Tôi muốn trải nghiệm tốt cho người dùng, vì vậy có thể khi kiểm tra mã thông báo và cố gắng đăng nhập, nó hiển thị màn hình "tải" của một số loại.

Tôi làm cách nào để đạt được điều này? Tôi không biết bộ điều khiển xem nào tôi nên đặt làm bộ điều khiển gốc trong AppDelegate hoặc cách tôi nên đặt nó sau khi người dùng đã đăng nhập. Tôi đã thử điều này trong ứng dụng Facebook và khi tôi mở nó, tôi thấy một bộ điều khiển điều hướng trống có vẻ như sau đó chế độ xem tiểu sử của tôi được tải. Họ đang làm gì đằng sau hậu trường và đây có phải là cách tốt nhất để đi không?

Tôi hiện không sử dụng Bảng phân cảnh.

Trả lời

9

Tôi đã triển khai một tệp tương tự, RootViewController là một "SplashViewController" trong navigationController, hiển thị biểu trưng đẹp, chỉ báo hoạt động và cung cấp thông tin người dùng về trạng thái xác thực. Nó giữ logic để kiểm tra mã thông báo được lưu trữ ở đó và thực hiện xác thực. Nếu xác thực thành công, ShowUserController được hiển thị bằng cách đẩy đến ngăn xếp navigationController.

Nếu xác thực thất bại, một LoginViewController được trình bày một cách bình thường. SplashViewController thực hiện ủy nhiệm của LoginViewController, không làm gì ngoài việc chuyển tên người dùng và mật khẩu cho SplashViewController. Khi đăng nhập thành công, LoginViewController bị loại bỏ và người dùng được hướng đến ShowUserController.

+0

Tôi đã đi tuyến đường này. Tôi tạo ra một PathFinderViewController mà tôi đặt rootViewController khi ứng dụng tải. Điều này kiểm tra nơi để đi. Nếu tôi cần đăng nhập, tôi hiển thị màn hình đăng nhập một cách bình thường và thử đăng nhập. Nếu thành công, tôi bỏ qua màn hình đăng nhập và thay đổi rootViewController thành UserViewController. Nếu PathFinder tìm thấy Auth_Token hợp lệ, nó chỉ đơn giản là thay đổi rootViewController thành UsersViewController. Cảm ơn! – sbonkosky

+0

@sbonkosky Rất vui được giúp bạn :). BTW bạn đã tạo sơ đồ lưu lượng như thế nào? – Anupdas

+0

Tôi đã sử dụng [LucidChart] (http://www.lucidchart.com/) – sbonkosky

4

Khởi động ứng dụng của bạn bằng trình điều khiển gốc làm ứng dụng mà người dùng sẽ nhìn thấy sau khi họ đăng nhập thành công, sau đó sắp xếp các chế độ xem/bộ điều khiển đăng nhập lên trên cùng với các cuộc gọi phương thức. Nếu xác thực thành công, người dùng của bạn sẽ là nơi họ muốn, nếu không bạn sẽ gọi các lớp đăng nhập một cách bình thường ở trên cùng. Sau khi chúng được xác thực, bạn sẽ không cần lượt xem đăng nhập nữa.

+0

Nhưng tôi phải làm gì nếu người dùng có kết nối dữ liệu chậm và kiểm tra xem liệu auth_token có hợp lệ không mất vài giây? những gì tôi hiển thị trong thời gian chờ đợi? – sbonkosky

+0

Bạn có thể đặt bất kỳ chế độ xem phương thức nào bạn thích. Đưa ra một chế độ xem phương thức với một spinner và một số văn bản loại bỏ khi quá trình xác thực mã thông báo hoàn tất. Ví dụ, đặt bộ điều khiển gốc, so với chế độ xem "tải ..." phương thức với trình quay cho đến khi quá trình xác thực hoàn tất. Nếu nó xấu, hãy loại bỏ chế độ xem spinner và đưa ra chế độ xem đăng nhập. Nếu nó tốt, chỉ cần loại bỏ chế độ xem spinner. Có tất cả điều khiển từ bộ điều khiển chế độ xem gốc giúp cuộc sống của bạn đơn giản hơn. –

+0

Đây là cách tôi đã nhìn thấy SDK của Facebook hoạt động. –

2

Để xây dựng câu trả lời của @Owen Hartnett vì văn bản này sẽ không phù hợp với nhận xét; Đây là cách tôi đã nhìn thấy SDK của Facebook hoạt động. Nếu bạn xây dựng một ứng dụng sử dụng Facebook iOS SDK làm cơ chế đăng nhập duy nhất, thì cách hoạt động của nó giống như sau:

Trong phương thức didFinishLaunchingWithOptions của đại biểu ứng dụng, trước tiên tôi kiểm tra mã thông báo truy cập "đã có trên tệp" , NSUserDefaults. Nếu không tìm thấy, tôi cần có một ứng dụng để ủy quyền ứng dụng của mình ngay lập tức khởi chạy luồng đăng nhập phương thức kết thúc bằng mã thông báo truy cập hợp lệ, sau đó được lưu vào NSUserDefaults để sử dụng trên ứng dụng tiếp theo đang mở.

Nếu tôi đã có mã thông báo truy cập trên tệp trong didFinishLaunchingWithOptions, thì tôi giả định đường dẫn hạnh phúc và mở "phiên đăng nhập người dùng" không đồng bộ bằng mã thông báo truy cập tôi tìm thấy trên tệp tại thời điểm mở ứng dụng. Nếu mã thông báo truy cập tôi có trong hồ sơ để mở phiên là hợp lệ, thì không có UX nào được hiển thị. Nếu mã thông báo truy cập tôi có trên tệp là mã thông báo truy cập bất hợp pháp (máy chủ nói quá cũ), thì phương pháp phiên mở của tôi trong ủy nhiệm ứng dụng của tôi, khi tìm ra, sẽ hiển thị luồng đăng nhập phương thức thích hợp.

Vì phương thức openSession này thực hiện không đồng bộ, bạn có thể tự hỏi bộ điều khiển chế độ xem gốc của bạn, cần có người dùng đã đăng nhập, sẽ hoạt động trong thời gian chờ đợi.

Câu trả lời là câu trả lời phải được viết như thể nó có người dùng đã đăng nhập. Nó nên giả định. Nếu nó chạy mã không thể chạy hoặc kết thúc thực thi thành công vì nó không có mã thông báo truy cập hợp lệ thì mã đó sẽ kích hoạt giao diện người dùng đăng nhập nếu nó chưa được hiển thị (ví dụ: kiểm tra mã thông báo truy cập trên ứng dụng đang mở) lần này, đã trình bày giao diện người dùng đăng nhập phương thức cho người dùng).

Cuối cùng, đây là phiên bản dịch của luồng đăng nhập SDK Facebook. Ví dụ: nếu bạn chỉ sử dụng SDK của mình, bạn sẽ không bao giờ giao tiếp với NSUserDefaults như tôi đề xuất. Tôi đã dịch luồng của họ thành "triển khai tùy chỉnh" đăng nhập vào API từ xa.

Các vấn đề liên quan