Cách sử dụng các thành phần để hiển thị nội dung web bên trong các ứng dụng Android.
Nền tảng Android đã hoạt động được hơn 10 năm và kể từ những ngày đầu tiên, nền tảng Android đã hỗ trợ tuyệt vời cho Web. Giao diện này được đi kèm với WebView, một thành phần cho phép các nhà phát triển sử dụng web bên trong các Ứng dụng Android của riêng họ. Hơn thế nữa, Android cho phép nhà phát triển đưa công cụ trình duyệt của riêng họ vào nền tảng này, thúc đẩy sự cạnh tranh và đổi mới.
Nhà phát triển có thể đưa web vào ứng dụng Android theo nhiều cách. WebView thường được dùng để hiển thị quảng cáo dưới dạng một thành phần bố cục được dùng cùng với các thành phần trên giao diện người dùng Android hoặc để đóng gói trò chơi HTML 5. Thẻ tuỳ chỉnh cho phép nhà phát triển xây dựng trình duyệt trong ứng dụng và cung cấp trải nghiệm thao tác liền mạch đến nội dung web của bên thứ ba. Hoạt động trên web đáng tin cậy cho phép nhà phát triển sử dụng Ứng dụng web tiến bộ (PWA) của họ trong các ứng dụng Android có thể tải xuống từ Cửa hàng Play.
Android WebView
WebView cho phép nhà phát triển truy cập vào HTML, CSS và JavaScript hiện đại bên trong ứng dụng Android, đồng thời cho phép chuyển nội dung trong APK hoặc được lưu trữ trên Internet. Đây là một trong những thành phần linh hoạt và mạnh mẽ nhất của Android, có thể dùng cho hầu hết các trường hợp sử dụng mà nội dung web được đưa vào ứng dụng Android. Từ việc hỗ trợ các dịch vụ quảng cáo như AdMob đến việc xây dựng và vận chuyển hoàn chỉnh các trò chơi HTML5 sử dụng API hiện đại như WebGL.
Tuy nhiên, khi dùng để tạo một trình duyệt trong ứng dụng hoặc đưa PWA vào một ứng dụng Android, WebView sẽ thiếu các tính năng bảo mật, tính năng và chức năng của nền tảng web.
Thử thách trên trình duyệt trong ứng dụng
Theo thời gian, ngày càng nhiều nhà phát triển xây dựng trải nghiệm trình duyệt kết hợp nội dung của bên thứ ba vào ứng dụng Android, với mục tiêu tạo ra trải nghiệm liền mạch hơn cho người dùng khi điều hướng đến trang web bên thứ ba. Những trải nghiệm đó được gọi là trình duyệt trong ứng dụng.
WebView hỗ trợ rộng rãi cho ngăn xếp công nghệ web hiện đại và hỗ trợ nhiều API web hiện đại, chẳng hạn như WebGL. Tuy nhiên, WebView chủ yếu là một bộ công cụ giao diện người dùng web. Phiên bản này không nhằm và không hỗ trợ tất cả các tính năng của nền tảng web. Khi một API đã có giải pháp thay thế cấp hệ điều hành (như Web Bluetooth) hoặc cần triển khai giao diện người dùng của trình duyệt (như thông báo đẩy), thì API đó có thể không được hỗ trợ. Khi nền tảng web phát triển và bổ sung thêm nhiều tính năng chỉ có trong các ứng dụng Android, khoảng cách này sẽ còn lớn hơn nữa. Vì nhà phát triển ứng dụng không kiểm soát tính năng nào được dùng khi mở nội dung của bên thứ ba, nên WebView trở thành một lựa chọn không phù hợp cho trình duyệt trong ứng dụng hoặc mở Ứng dụng web tiến bộ. Ngay cả khi WebView đã triển khai khả năng hỗ trợ cho tất cả các tính năng của nền tảng web, các nhà phát triển vẫn cần phải viết mã và triển khai giao diện người dùng riêng cho các chức năng như quyền hoặc thông báo đẩy. Điều này khiến người dùng khó có thể đảm bảo tính nhất quán.
Những điều cần cân nhắc về bảo mật khi sử dụng WebView làm trình duyệt trong ứng dụng
WebView cho phép ứng dụng nhúng toàn quyền truy cập vào nội dung được hiển thị, bao gồm cả cookie và DOM. Đó là những tính năng mạnh mẽ và đòi hỏi sự tin tưởng cao của người dùng.
Vì không dùng làm khung để xây dựng trình duyệt, nên WebView sẽ thiếu các tính năng bảo mật trong các trình duyệt hiện đại.
Kiến trúc đa tiến trình và cách ly trang web
Các trình duyệt được thiết kế để bảo mật trong khi hiển thị và thực thi nội dung không đáng tin cậy. Để đảm bảo người dùng vẫn an toàn trong khi điều hướng nội dung có thể không đáng tin cậy hoặc thậm chí là độc hại, các trình duyệt hiện đại sử dụng các kỹ thuật như sử dụng cấu trúc đa quy trình và cách ly trang web.
Nếu không có kiến trúc đa tiến trình, một sự cố do trang web gây ra có thể gây ra sự cố cho toàn bộ ứng dụng trình duyệt hoặc một lỗ hổng bảo mật có thể bị lợi dụng để kiểm soát toàn bộ thiết bị. Việc tách biệt trang web sẽ thêm một lớp bảo mật khác, khiến các trang web không đáng tin cậy khó truy cập và lấy cắp thông tin từ các trang web khác hơn.
Cho đến Android 8.0 Oreo, trình kết xuất WebView sử dụng quy trình tương tự như ứng dụng nhúng. Trên các phiên bản hệ điều hành mới hơn và khi các thiết bị có đủ khả năng, trình kết xuất sẽ chạy trong một quy trình khác. Tuy nhiên, một quy trình duy nhất vẫn được chia sẻ giữa tất cả các trang và phiên bản WebView đang chạy các trang đó, khiến bạn không thể triển khai đầy đủ tính năng tách biệt trang web.
Việc thiếu cấu trúc đa tiến trình và cách ly trang web không phải là vấn đề đối với các ứng dụng hiển thị nội dung mà chúng sở hữu và tin tưởng, nhưng có thể là vấn đề đối với các ứng dụng chạy nội dung không đáng tin cậy của bên thứ ba (như trình duyệt trong ứng dụng) và khiến người dùng gặp phải các lỗ hổng như Meltdown và Spectre. Các ứng dụng này có thể được dùng để đánh cắp cookie, thông tin ngân hàng, thông tin cá nhân, v.v.
Chỉ báo giao diện người dùng bảo mật
Điều quan trọng là bạn phải cung cấp các chỉ báo bảo mật tốt cho người dùng. Đồng thời, các trình duyệt đã nỗ lực rất nhiều và luôn phát triển trong lĩnh vực này. Tuy nhiên, WebView thiếu API để kiểm tra xem kết nối của một trang web có an toàn hay không. API này cho phép nhà phát triển ứng dụng xây dựng các chỉ báo bảo mật đáng tin cậy. Chẳng hạn, việc thiếu API như vậy có thể khiến URL hiển thị trên thanh địa chỉ không khớp với trang mà người dùng nhìn thấy, thậm chí cả qua các kết nối HTTPS bảo mật.
Một lựa chọn khác dành cho nhà phát triển là nhúng công cụ trình duyệt vào ứng dụng của họ. Ngoài việc giúp tăng kích thước ứng dụng, phương pháp này vừa phức tạp vừa tốn thời gian.
Thẻ tuỳ chỉnh như một giải pháp cho trình duyệt trong ứng dụng
Thẻ tuỳ chỉnh đã được ra mắt trong Chrome 45 và cho phép nhà phát triển sử dụng một thẻ trên trình duyệt mặc định của người dùng trong ứng dụng. Ban đầu, Chrome phát hành Thẻ tuỳ chỉnh nên có tên là "Thẻ tuỳ chỉnh của Chrome". Hiện nay, đây là API Android và hầu hết các trình duyệt phổ biến đều hỗ trợ Thẻ tuỳ chỉnh, bao gồm cả Chrome, Firefox, Edge và Samsung Internet. Vì vậy, bạn chỉ nên gọi API này là "Thẻ tuỳ chỉnh"
Thẻ tuỳ chỉnh giúp nhà phát triển tích hợp liền mạch nội dung web vào trải nghiệm trong ứng dụng của họ. Chúng cũng cho phép nhà phát triển tuỳ chỉnh hoạt động hiển thị nội dung web bằng cách cho phép họ tuỳ chỉnh màu thanh công cụ, các nút hành động, ảnh động chuyển đổi, v.v.
Các API này cũng cung cấp các tính năng trước đây không có sẵn khi sử dụng WebView hoặc nhúng công cụ trình duyệt. Vì trình duyệt trong ứng dụng sử dụng trình duyệt của người dùng, nên Thẻ tuỳ chỉnh chia sẻ bộ nhớ với trình duyệt, vì vậy, người dùng không cần đăng nhập lại vào các trang web yêu thích mỗi khi một trong những ứng dụng đã cài đặt của họ bắt đầu phiên duyệt web trong ứng dụng.
Không giống như WebView, Thẻ tuỳ chỉnh hỗ trợ tất cả tính năng và API trên nền tảng web được trình duyệt hỗ trợ.
Mở ứng dụng web tiến bộ bằng Hoạt động đáng tin cậy trên web
Ứng dụng web tiến bộ mang đến cho web nhiều hành vi và khả năng mà trước đây chỉ có trên các ứng dụng dành riêng cho nền tảng. Khi hành vi giống ứng dụng ra đời, các nhà phát triển càng mong muốn sử dụng lại những trải nghiệm đó trên Android, khiến họ bắt đầu tìm cách tích hợp PWA vào ứng dụng.
Thẻ tuỳ chỉnh hỗ trợ mọi chức năng và API hiện đại dành cho web. Tuy nhiên, do được thiết kế chủ yếu để mở nội dung của bên thứ ba, nên thẻ này có một thanh công cụ ở trên cùng để cho người dùng biết họ đang truy cập vào URL nào, cũng như biểu tượng khoá cho biết trang web có an toàn hay không. Khi mở trải nghiệm riêng của một ứng dụng, thanh công cụ sẽ ngăn ứng dụng có cảm giác như ứng dụng được tích hợp với hệ điều hành.
Hoạt động đáng tin cậy trên web được ra mắt trong Chrome 72 và cho phép nhà phát triển sử dụng PWA trong ứng dụng Android. Giao thức của giao thức này tương tự như giao thức Thẻ tuỳ chỉnh, nhưng có các API cho phép nhà phát triển xác minh (thông qua Đường liên kết đến tài sản kỹ thuật số) rằng họ kiểm soát cả ứng dụng Android và URL đang được mở, đồng thời xoá thanh URL khi cả hai đều đúng.
Họ cũng giới thiệu các API để tạo màn hình chờ khi mở PWA hoặc uỷ quyền thông báo trên web để mã Android xử lý. Các tính năng khác như hỗ trợ Play Billing sẽ sớm ra mắt.
Vì các URL được mở trong Hoạt động đáng tin cậy trên web dự kiến sẽ là PWA và có một loạt hành vi cũng như đặc điểm hiệu suất, nên Trusted Web Activity giới thiệu tiêu chí chất lượng cho các PWA đang được mở trong đó.
Hạn chế của các giải pháp hiện tại
Ý kiến phản hồi của nhà phát triển cho thấy nhu cầu về khả năng tương thích với nền tảng của Thẻ tuỳ chỉnh kết hợp với tính linh hoạt của WebView, chẳng hạn như để họ có thể truy cập vào DOM hoặc chèn JavaScript vào trình duyệt trong ứng dụng.
Thẻ tuỳ chỉnh là một thẻ được trình duyệt của người dùng hiển thị, có giao diện người dùng tuỳ chỉnh hoặc hoàn toàn không có giao diện người dùng. Điều này có nghĩa là trình duyệt cần đáp ứng kỳ vọng của người dùng về quyền riêng tư và tính bảo mật đối với trình duyệt, khiến một số tính năng trong số đó không khả thi.
Nhóm Web trên Android tại Google đang xem xét các giải pháp thay thế và thử nghiệm các giải pháp để giải quyết những trường hợp sử dụng đó. Hãy chú ý theo dõi để biết thông tin chi tiết!
Tóm tắt
WebView rất hữu ích khi một ứng dụng cần HTML, CSS và JavaScript bên trong ứng dụng Android, nhưng không sử dụng các tính năng và chức năng nâng cao có trên web hiện đại như Thông báo đẩy, Bluetooth trên web và các tính năng khác. Bạn không nên mở nội dung được thiết kế cho nền tảng web hiện đại vì nội dung này có thể không hiển thị theo cách nhà phát triển mong muốn. Bạn không nên sử dụng WebView để tạo trình duyệt trong ứng dụng. Mặt khác, việc hiển thị nội dung trên web của bên thứ nhất là một khía cạnh mà WebView thực sự nổi bật.
Bạn nên sử dụng Hoạt động đáng tin cậy trên web khi muốn hiển thị Ứng dụng web tiến bộ của riêng họ ở chế độ toàn màn hình bên trong ứng dụng Android. Nó có thể được dùng làm hoạt động duy nhất trong ứng dụng hoặc được dùng cùng với các hoạt động Android khác.
Bạn nên sử dụng Thẻ tuỳ chỉnh để mở nội dung của bên thứ ba được thiết kế cho nền tảng web (còn gọi là trình duyệt trong ứng dụng).