Web trên Android

Cách sử dụng các thành phần khác nhau để hiển thị nội dung web bên trong ứng dụng Android.

Nền tảng Android đã tồn tại hơn 10 năm và từ những ngày đầu, nền tảng này đã hỗ trợ rất tốt cho Web. WebView đi kèm với một thành phần cho phép nhà phát triển sử dụng web trong Ứ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, 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 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 tạo trình duyệt trong ứng dụng và mang đến trải nghiệm điều hướng liền mạch đến nội dung web của bên thứ ba. Còn tính năng Hoạt động đáng tin cậy trên web cho phép nhà phát triển sử dụng Ứng dụng web tiến bộ (PWA) 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 phân phối nội dung bên trong tệp APK hoặ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ể được dùng cho hầu hết các trường hợp sử dụng trong đó nội dung web được đưa vào ứng dụng Android. Từ việc cung cấp dịch vụ quảng cáo như AdMob đến việc xây dựng và phân phối các trò chơi HTML5 hoàn chỉnh sử dụng các API hiện đại như WebGL.

Tuy nhiên, khi được dùng để tạo trình duyệt trong ứng dụng hoặc đưa PWA vào ứng dụng Android, WebView sẽ thiếu 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ách thức về trình duyệt trong ứng dụng

Theo thời gian, ngày càng có nhiều nhà phát triển xây dựng trải nghiệm trình duyệt tích hợp nội dung của bên thứ ba vào ứng dụng Android của họ, 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 truy cập vào trang web của 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. API này không nhằm mục đích 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ó phương án thay thế cấp hệ điều hành, chẳng hạn như Web Bluetooth, hoặc yêu cầu triển khai giao diện người dùng trình duyệt, chẳng hạn như thông báo đẩy, API đó có thể không được hỗ trợ. Khi nền tảng web phát triển và thêm nhiều tính năng chỉ có trong ứng dụng Android, khoảng cách này sẽ trở nên lớn hơn nữa. Vì nhà phát triển ứng dụng không kiểm soát được tính năng nào được sử dụng khi mở nội dung của bên thứ ba, nên WebView không phải là lựa chọn phù hợp cho trình duyệt trong ứng dụng hoặc khi mở Ứng dụng web tiến bộ. Ngay cả khi WebView triển khai tính năng hỗ trợ cho tất cả các tính năng của nền tảng web, 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, khiến người dùng khó đạt được 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 cấp cho ứng dụng nhúng toàn quyền truy cập vào nội dung đã hiển thị, bao gồm cả cookie và DOM. Đó là những tính năng mạnh mẽ đòi hỏi người dùng phải tin tưởng cao.

Vì WebView không phải là khung để xây dựng trình duyệt nên thiếu các tính năng bảo mật có trong trình duyệt hiện đại.

Kiến trúc nhiều quy trình và tính năng tách biệt trang web

Các trình duyệt được thiết kế để đảm bảo an toàn 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 luôn an toàn 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ìnhtách biệt trang web.

Nếu không có cấu trúc đa quy trình, sự cố do trang web gây ra có thể làm hỏng toàn bộ ứng dụng trình duyệt hoặc một lỗ hổng có thể bị khai thác để kiểm soát toàn bộ thiết bị. Tính năng tách biệt trang web bổ sung một lớp bảo mật khác, giúp các trang web không đáng tin cậy khó truy cập và đánh 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 thiết bị đủ 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 vẫn được chia sẻ giữa tất cả các trang và các thực thể 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 quy trình và tính năng tách biệt 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 cậy, nhưng có thể là vấn đề đối với các ứng dụng chạy nội dung của bên thứ ba không đáng tin cậy, chẳng hạn như trình duyệt trong ứng dụng, đồng thời khiến người dùng gặp phải các lỗ hổng như MeltdownSpectre. Các lỗ hổ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à nhiều thông tin khác.

Chỉ báo giao diện người dùng bảo mật

Điều quan trọng là phải cung cấp các chỉ báo bảo mật tốt cho người dùng. 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 một API để kiểm tra xem kết nối của trang web có an toàn hay không, 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. Ví dụ: việc thiếu API như vậy có thể khiến URL hiển thị trong thanh địa chỉ không khớp với trang hiển thị cho người dùng, ngay cả khi kết nối qua HTTPS an toàn.

Nhà phát triển có thể sử dụng một tuỳ chọn khác là nhúng công cụ trình duyệt vào ứng dụng của họ. Ngoài việc làm tăng kích thước ứng dụng, phương pháp này còn phức tạp và tốn thời gian.

Thẻ tuỳ chỉnh là 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ẻ trong trình duyệt mặc định của người dùng trong ứng dụng của họ. Thẻ tuỳ chỉnh ban đầu do Chrome phát hành nên được gọi là "Thẻ tuỳ chỉnh của Chrome". Hiện tại, đây là một 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 Chrome, Firefox, Edge và Samsung Internet. Vì vậy, bạn chỉ nên gọi 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 ứng dụng của họ. Các lớp này 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ụ, nút hành động, ảnh động chuyển đổi và nhiều tính năng khác.

Các thành phần này cũng cung cấp các tính năng trước đây không có 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 được cung cấp bởi trình duyệt của người dùng, nên Thẻ tuỳ chỉnh sẽ chia sẻ bộ nhớ với trình duyệt. Nhờ đó, 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 các ứng dụng đã cài đặt của họ bắt đầu một phiên duyệt web trong ứng dụng.

Không giống như WebView, Thẻ tuỳ chỉnh hỗ trợ tất cả các tính năng và API của nền tảng web mà trình duyệt hỗ trợ.

Mở Ứng dụng web tiến bộ bằng tính năng Hoạt động đáng tin cậy trên web

Ứng dụng web tiến bộ mang đến nhiều hành vi và chức năng mà trước đây chỉ có trong các ứng dụng dành riêng cho nền tảng. Khi hành vi giống ứng dụng được ra mắt, nhà phát triển muốn sử dụng lại những trải nghiệm đó trên Android nhiều hơn và bắt đầu tìm cách tích hợp PWA vào ứng dụng của họ.

Thẻ tuỳ chỉnh hỗ trợ tất cả các API và chức năng web hiện đại, nhưng vì chủ yếu được thiết kế để 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 liệu trang web có an toàn hay không. Khi mở trải nghiệm riêng của ứng dụng, thanh công cụ sẽ giúp ứng dụng không có cảm giác như được tích hợp với hệ điều hành.

Hoạt động web đáng tin cậy được giới thiệu trong Chrome 72 và cho phép nhà phát triển sử dụng PWA của họ bên trong ứng dụng Android. Giao thức của hoạt động này tương tự như giao thức Thẻ tuỳ chỉnh, nhưng giới thiệu các API cho phép nhà phát triển xác minh (thông qua Đường liên kết tài sản kỹ thuật số) rằng họ kiểm soát cả ứng dụng Android và URL đang 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 cho mã Android xử lý thông báo web. Chúng tôi sẽ sớm ra mắt thêm các tính năng khác như hỗ trợ Play Billing.

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 tập hợp các hành vi và đặc điểm về hiệu suất, nên Hoạt động đáng tin cậy trên web sẽ giới thiệu tiêu chí chất lượng cho các PWA được mở bên 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 cần có 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 để 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ẻ do 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 không có giao diện người dùng nào. Đ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à bảo mật đối với trình duyệt, khiến một số tính năng đó không thể thực hiện được.

Nhóm Web trên Android tại Google đang tìm hiểu 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 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 hơn có trên web hiện đại như Thông báo đẩy, Bluetooth web và các tính năng khác. Bạn không nên sử dụng tính năng này khi mở nội dung được thiết kế cho nền tảng web hiện đại, vì nội dung đó có thể không hiển thị theo cách mà nhà phát triển dự định. 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 web của bên thứ nhất là một lĩnh vực mà WebViews thực sự tỏa sáng.

Bạn nên sử dụng Hoạt động web đáng tin cậy khi nhà phát triển 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. Bạn có thể sử dụng hoạt động này làm hoạt động duy nhất trong ứng dụng hoặc sử dụng cùng với các hoạt động Android khác.

Thẻ tuỳ chỉnh là cách được đề xuất để 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.