Bắt đầu với SFSafariViewController (phần 1)

61

Ứng dụng di động kết hợp xem nội dung trên web hiện nay đang trở nên rất phổ biến. Trong nhiều năm qua, các dev iOS đã bị bắt buộc phải tạo ra trải nghiệm duyệt web riêng bên trong app của họ hoặc phải mở URL với Safari. Cả 2 cách đó đều mang lại những trở ngại và nhược điểm cổ hữu mà trước đây không thể tránh khỏi.

Tất cả những điều đó đã được thay đổi trong iOS 9 cùng với class mới là SFSafariViewController. Với class này, bạn có thể cung cấp những trải nghiệm duyệt web với đầy đủ tính năng ngay trong app mà không mất quá nhiều thời gian để phát triển nó.

Trước khi chúng ta bắt đầu, chúng ta sẽ chỉ ra bước tiếp cận mà chúng ta sẽ thực hiện trong suốt bài hướng dẫn này(bạn có thể download trước demo app). Như các bạn sẽ được thấy sau này, thực sự không có nhiều code để sử dụng safari view controller. Giá trị thực sự của safari view controller đến từ việc hiểu rõ khi nào cần sử dụng và quan trọng hơn là tại sao lại sử dụng nó.

Với iOS 9, các dev có 3 sự lựa chọn để hiển thị nội dung web cho user:

  • Safari: Dùng openURL(_:) để show một trang trong safari, bắt buộc user phải tạm thoát app.
  • Custom Viewing Experience: bạn có thể sử dụng WKWebView hoặc UIWebView để tạo một trình duyệt tuỳ biến.
  • SFSafariViewController: Với SFSafariViewController, bạn có thể sử dụng gần như tất cả những lợi ích của việc duyệt web trong Safari mà không phải bắt user thoát app.

Trước iOS 9, 2 lựa chọn đầu tiên chỉ là những lựa chọn duy nhất cho các dev. Để biết được khi nào bạn phải sử dụng một trong số chúng, phụ thuộc vào hoàn cảnh của việc hiển thị nội dung. Trong khi làm việc với app demo, chúng ta sẽ sử dụng cả 3 cách trên.

Bây giờ chúng ta đã biết làm thế nào để hiển thị nội dung web, hãy đặt câu hỏi tại sao chúng cần phải hiển thị. Trên iOS, có hai trường hợp chủ yếu để xem nội dung của một trang web:

  • Custom Web Content: Đây là nội dung không dành cho trình duyệt. Đây có thể là một báo cáo hoặc một cái gì đó tương tự được tạo ra từ một API hoặc máy chủ. Ở đây, người dùng đang tìm kiếm một phần nội dung và không có làm gì khác.
  • Viewing Websites: Đây là trường hợp phổ biến nhất. Người dùng cần duyệt web ngay để có thể đăng nhập vào một dịch vụ hoặc điều hướng tới một trang web.

Cũng nên nhớ rằng có một trường hợp sử dụng thứ ba, đó là xác thực dựa trên web. Trong bài hướng dẫn này, chúng ta sẽ không tập trung vào trường hợp đó.

Nếu phạm vi duyệt web của người dùng bên trong của ứng dụng của bạn rơi vào trường hợp sử dụng đầu tiên, safari view controller có lẽ không phải những gì bạn cần. Trong những trường hợp đó, bạn đang hiển thị nội dung mà bạn sở hữu và kiểm soát và có thể cần phải tùy biến mở rộng.

Nếu thấy ứng dụng của bạn phù hợp với trường hợp này, hãy dùng WKWebView. Nó được kế thừa từ UIWebView và bao gồm một số cải tiến, như việc sử dụng Nitro JavaScript engine. Cách tiếp cận này cho phép bạn xây dựng các giao diện người dùng toàn bộ từ đầu. Bạn cũng có affordance khác, chẳng hạn như tải các tập tin một cách an toàn và sử dụng WKWebsiteDataStore để truy vấn cookie.

Đối với phần lớn các app đều có trường hợp này, tuy nhiên, chỉ cần cung cấp 1 trình duyệt web tổng quát. Đây là trường hợp hoàn hảo để sử dụng safari view controller. Trước iOS 9, các dev tốn nhiều thời gian để tạo giao diện riêng cho trình duyệt web của họ, cái mà có thể dẫn đến các vấn đề cho user.

Trải nghiệm duyệt web của những app khác nhau là khác nhau, có thể gây nhầm lẫn cho user. Một số giao diện cũng có thể thiếu những điều người dùng mong đợi, chẳng hạn như một thanh tiến trình chỉ ra một trang đang load được bao nhiêu.

Hơn nữa, bạn không có quyền truy cập vào tất cả những tính năng của Safari. Bao gồm reader view, iCloud keychain với khả năng autofill và nhiều hơn thế nữa. Nếu trước iOS 9 mà bạn muốn sử dụng đầy đủ những tính năng đó, bạn bắt buộc phải đưa người dùng ra khỏi app của bạn để mở nội dung trong Safari. Class SFSafariViewController ra đời cùng iOS 9 giúp bạn giải quyết tất cả những vấn đề đó.

Xem tiếp phần 2….

Nguồn IDE Academy via code.tutsplus.com