IOS 9 (Xcode7) Không thể và có thể
_Như chúng ta đã biết IOS9 đã được Apple release mới đây, kèm theo bộ phát triển Xcode7. Vậy ở IOS và bản Xcode mới này có những thay đổi như thế nào, cái gì đã có thể và cái gì sẽ không thể thực hiện được. Chúng ta hãy cùng tìm hiểu (quaylen) _ 1. Không sử dụng giao thức SSL/TLS thì không thể ...
_Như chúng ta đã biết IOS9 đã được Apple release mới đây, kèm theo bộ phát triển Xcode7. Vậy ở IOS và bản Xcode mới này có những thay đổi như thế nào, cái gì đã có thể và cái gì sẽ không thể thực hiện được. Chúng ta hãy cùng tìm hiểu (quaylen) _
1. Không sử dụng giao thức SSL/TLS thì không thể gửi nhận bản tin
Khi build App trên Xcode7 thì mặc định giao thức này phải được áp dụng, nếu không quá trình truyền nhận dữ liệu sẽ không thể thực hiện được. Không chỉ ở WebViewmà còn ở các Library truyền nhận dữ liệu cũng được áp dụng. Do đó, chúng ta sẽ không hiện thị được nội dung của Web không support giao thức SSL/TLS, và cũng không nhận được dữ liệu từ các API không support SSL/TLS (rip)
Cách giải quyết là
- Sử dụng ATS (App Transport Security) để settings trong app, chúng ta có thể giải quyết được vấn đề này. Ở trong ATS đó ta chỉ định các Exception là những Domain không support được SSL/TLS thì những domain này sẽ được chấp nhận để kết nối với app (honho)
- Có một cách giải quyết nữa đó là sử dụng SFSafariViewController sẽ được nêu đến ở phần sau của bài viết.
Tuy nhiên thì đây vẫn chỉ là giải pháp tạm thời phải không? Tốt nhất là chúng ta vẫn nên chấp nhận điều này và chỉnh sửa để support SSL/TLS sớm nhoé!!
2. Có thể share Safari và Cookie trong WebView
Khi sử dụng SFSafariViewController chúng ta có thể chia sẻ Safari và Cookie được. Ví dụ như khi user dùng Safari để login, thì ở trong WebView của App chúng ta vẫn có thể sử dụng tiếp được account của user này. Do việc sử dụng luôn Cookie nên không cần khởi động Safari vẫn có thể lấy được phiên sử dụng đó.
Tuy nhiên lại không thể customize được: (haiz)
Vì ta không thể custom được khi sử dụng SFSafariViewController,nên những việc như hook URL để thay đổi cách hiển thị, thêm bớt button chúng ta không thể thực hiện được. Cụ thể như ở bảng dưới đây
UIWebView | WKWebView | SFSafariView | |
---|---|---|---|
Not SSL/TLS | ✕ | ✕ | ◯ |
Share Safari & Cookie | ✕ | ✕ | ◯ |
Customize | ◯ | ◯ | ✕ |
3. Có thể viết được ADBlock Extension cho Safari
Đó chính là chức năng Block Content mà Apple cung cấp cho chúng ta. Do đó sử dụng chức năng này chúng ta có thể viết được một Block Extension.
Ví dụ như: "Chặn quảng cáo ở website" , "xoá quảng cáo ở Youtube". Các bạn có thể hình dung chúng sẽ thực thi như ở Video này: Youtube:Adblock
Ví dụ về Extension như ở đoạn code dưới đây, chúng ta có thể chặn việc load nội dung từ những resource được chỉ định, hoặc không hiển thị những element được chỉ định:
[ { "action": { "type": "block" }, "trigger": { "url-filter": "example.com/track.js" } }, { "action": { "selector": "a[href^="https://example.com/redirect"]", "type": "css-display-none" }, "trigger": { "url-filter": ".*" } } ]
Tuy nhiên để có thể sử dụng được Extension này thì:
- Phải Install Extension
- Trong Settings của Safari phải set ON
Phải theo các bước đó thì extension mới chạy được. Do đó liệu có nhiều người dùng sẽ sử dụng Extension hay không chúng ta vẫn chưa thể biết trước được
4. Xuất hiện nút "Quay lại"
Khi chúng ta chuyển giữa các App, thì ở góc trái phía trên xuất hiện thêm nút Back. Khi bấm vào nút này ta có thể quay lại App trước đó. Tuy nhiên thì nút này khá là bé, tác giả hơi lo ngại là người dùng sẽ không để ý đến nó lắm. (khoc)
5. Settings được font, background color cho Reader Mode
Chức năng Reader Mode của Safari mà người dùng rất hay sử dụng, ở phiên bản này chúng ta đã có thể settings detail được. Có thể settings được font, background khá giống với App Kindle. và trong SFSafariViewController chúng ta cũng settings được tương tự (honho)
6. Nếu App có sẵn trong máy, app sẽ đột nhiên được bật lên (Universal Links)
Từ IOS9 Universal Links đã được đưa thêm vào sử dụng. Như vậy mỗi khi chúng ta tab vào nhưng link đặc biệt (đặc định), nếu app đã được cài trong máy thì tự động app đó sẽ được mở lên, còn nếu không thì khi đó Safari mới được dùng để kết nối tới link vừa tab.
Với tính năng này thì từ Safari sẽ chuyển sang App tương ứng và khi đó nút quay lại nhỏ nhỏ sẽ xuất hiện ở góc trái phía trên như đã nêu ở phần trên. Mặt khác chúng ta không cần thiết phải sử dụng Custom URI Scheme (VD: twitter://) URL sẽ theo một thể thống nhất, đó chính là một điểm lợi từ việc sử dụng Universal Links
Tuy nhiên để sử dụng được Universal Links thì chúng ta cần phải thoả mãn những điều kiện sau đây:
- Web: Sử dụng giao thức SSL/TLS, Ở Domain root với chứng thực SSL tương ứng cần có file chữ ký apple-app-site-association được đặt ở đó.
- App: Ở trong Xcode ta cần settings những Domain app support, đồng thời liệt kê các page đặc trưng mà sẽ sử dụng app để mở (deeplink). Để tìm hiểu kỹ hơn chúng ta nên tìm hiểu thêm các bài viết về Universal Links nhé
7. Sử dụng Custom Scheme để khởi động App
Ngoài Universal Links chúng ta còn dùng Custom URI Scheme để khởi động App. Custom URI Scheme cần được khai báo ở file Info.plist. Và tối đa chúng ta chỉ được khai báo đến 50 cái là cùng (hehe)
8. Nếu sử dụng IPv4 Only thì
Ở IOS9 thì IPv6 đã bắt đầu được ưu tiên hơn IPv4, do đó, trong môi trường chỉ sử dụng IPv4 , chúng ta sẽ bị delay 25ms. Cách thức làm việc đó là :
Nếu coi A là ipv4 còn AAAA là ipv6 , công đoạn update app được tiến hành như sau:
- Yêu cầu DNS server cho A và AAAA. Nếu DNS records không có ở bộ nhớ đệm, yêu cầu DNS sẽ được đẩy đi và cho AAAA đầu tiên
- Nếu bản tin reply chúng ta nhận được là AAAA, chúng ta sẽ gửi bản tin v6 SYN ngay lập tức
- Nếu bản tin nhận được là A mà chúng là vẫn đang expecting cho AAAA, ta sẽ đợi trong 25ms
- Nếu qua 25ms, ta gửi bản tin v4 SYN
- Nếu trong vòng 25ms đó ta nhận đc bản tin reply AAAA thì chúng ta ngay lập tức quay lại bước trên, gửi bản tin v6 SYN
Link tham khảo: Apple and IPv6
Trên đây là một số những điều Không thể và có thể ở trong IOS9 và Xcode7 mà tác giả muốn tổng hợp sơ bộ cho bạn đọc. Chắc chắn ở những bản update tiếp theo sẽ còn nhiều thay đổi, khi đó chúng ta lại tiếp tục có nhiều cơ hội để cùng nhau trao đổi và thảo luận (quaylen).
Link tham khảo: iOS 9 (XCode7) でできること、できないことまとめ