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

60

Để bắt đầu, build và run demo app. Bạn sẽ được giới thiệu với giao diện người dùng có tối thiểu 3 lựa chọn. Mỗi lựa chọn tương ứng với một trong các phương pháp đã nói tới trước đó để hiển thị nội dung web.

tpInitialUI

The first option we’ll demonstrate is the more traditional route, which is handing off the URL to Safari. Open ViewController.swift and notice the urlString property at the top of the file. This will define what’s presented in the coming examples, so feel free to set it to whatever you desire.

Ở lựa chọn đầu tiên, chúng ta sẽ chứng minh cách truyền thống, cái mà xử lý đem URL tới Safari. Mở ViewController.swift và để ý biến urlString ở trên cùng của file này. Cái này sẽ xác định những gì được hiển thị trong những ví dụ tiếp theo, các bạn có thể đặt đường dẫn là bất cứ gì mà các bạn muốn.

Một thứ quan trọng bạn cần lưu ý trong iOS 9, TLS 1.2 được thực hiện mặc định. Nếu server bạn cố gắng truy cập đến không hỗ trợ điều này, bạn có thể thấy dòng thông báo lỗi trong console:

tpTLS

 

 

Có nhiều cách để giải quyết việc này, chẳng hạn như là thêm vào một key trong file Info.plist của app. Đây là sự thay đổi của Apple nhằm tăng cường bảo mật trong quá trình duyệt web. Thêm vào những đoạn code sau vào action openInSafari(_:) :

Build và run ứng dụng. Khi bạn nhấn vào nút “Open in safari”, hệ điều hành sẽ thoát khỏi ứng dụng và mở URL trong Safari:

tpSafari

Mặc dù lựa chọn này chắc chắn sẽ thực thi được, chúng ta đã bắt user phải thoát khỏi app. Như mọi dev, ý tưởng là chúng ta muốn trải nghiệm ngay bên trong app. Một sự cải thiện trong iOS 9 đã thực hiện với phương pháp này, tuy nhiên, nó là nút back nhỏ ở trên cùng bên trái:

tpBackButton

Nhấn vào nút này sẽ đưa người dùng trở lại app trước đó. Để khắc phục vấn đề bắt người dùng thoát khỏi app, hãy đi tới phương án tiếp theo.

Bây giờ chúng ta sẽ mở cùng một URL bên trong app. Để làm điều này, chúng ta sẽ sử dụng UIWebView. Logic cho trình duyệt web đơn giản này được tìm thấy trong class CustomWebViewController.

Vì chúng ta không cần bất kỳ một tính năng nâng cao nào của WebKit, chúng ta chỉ mở page bằng webview. Trong class ViewController, thêm đoạn code sau vào prepareForSegue(_:sender:):

Run app. Nhấn vào nút giữa “Open with webview” và trang web sẽ được load bên trong app.

tpWebView

Ngay cả khi người dùng ở trong ứng dụng, những nhược điểm của phương pháp này hiển nhiên vẫn có. Nếu không phát triển thêm các tính năng, sẽ không thấy được tiến trình tải, thanh địa chỉ URL và những thứ khác mà người dùng mong đợi khi duyệt web. Bây giờ chúng ta sử dụng lớp SFSafariViewController để giải quyết những vấn đề này.

Bởi vì chúng ta sử dụng class SFSafariViewController, chúng ta cần import Safari Services. Ở trên cùng của file ViewController.swift, thêm câu lệnh import phía dưới import UIKit:

Tiếp theo, cập nhật những dòng code phía dưới vào hàm openWithSafariVC(_:):