Quyền truy cập trên Android

Quyền truy cập ứng dụng hỗ trợ quyền riêng tư của người dùng bằng cách bảo vệ quyền truy cập vào:

  • Dữ liệu bị hạn chế, chẳng hạn như trạng thái hệ thống và thông tin liên hệ của người dùng.
  • Hành động bị hạn chế, chẳng hạn như kết nối với thiết bị đã ghép nối và ghi âm.

Trang này cung cấp thông tin tổng quan về cách hoạt động của các quyền trên Android, bao gồm cả quy trình hoạt động tổng thể để sử dụng các quyền, thông tin mô tả các loại quyền và một số phương pháp hay nhất để sử dụng các quyền trong ứng dụng. Các trang khác giải thích cách đánh giá xem ứng dụng có cần yêu cầu quyền hay không, khai báo quyền, yêu cầu quyền khi bắt đầu chạyhạn chế cách các ứng dụng khác tương tác với các thành phần của ứng dụng.

Để xem danh sách đầy đủ các quyền cho ứng dụng trên Android, hãy truy cập trang tài liệu tham khảo API về quyền.

Để xem một số ứng dụng mẫu minh hoạ quy trình hoạt động của các quyền, hãy truy cập vào kho lưu trữ mẫu quyền cho Android trên GitHub.

Quy trình sử dụng quyền

Nếu ứng dụng của bạn cung cấp chức năng có thể yêu cầu quyền truy cập dữ liệu bị hạn chế hoặc các hành động bị hạn chế, hãy xác định xem bạn có thể lấy thông tin hoặc thực hiện các thao tác đó mà không cần khai báo quyền hay không. Bạn có thể thực hiện nhiều trường hợp sử dụng trong ứng dụng, chẳng hạn như chụp ảnh, tạm dừng nội dung nghe nhìn phát lại và hiển thị quảng cáo phù hợp mà không cần khai báo bất kỳ quyền nào.

Nếu bạn quyết định rằng ứng dụng phải truy cập vào dữ liệu bị hạn chế hoặc thực hiện các hành động bị hạn chế để thực hiện một trường hợp sử dụng, hãy khai báo quyền thích hợp. Một số quyền (còn gọi là quyền khi cài đặt) được tự động cấp khi ứng dụng được cài đặt. Các quyền khác (còn gọi là quyền khi bắt đầu chạy) yêu cầu ứng dụng thực hiện thêm một bước nữa là yêu cầu cấp quyền trong thời gian chạy.

Hình 1 minh hoạ quy trình sử dụng quyền cho ứng dụng:

Hình 1. Sơ đồ quy trình hoạt động tổng thể để sử dụng quyền trên Android.

Các loại quyền

Android phân quyền thành các loại khác nhau, bao gồm quyền khi cài đặt, quyền khi bắt đầu chạy và quyền đặc biệt. Mỗi loại quyền cho biết phạm vi dữ liệu bị hạn chế mà ứng dụng có thể truy cập và phạm vi hành động bị hạn chế mà ứng dụng có thể thực hiện khi hệ thống cấp quyền cho ứng dụng.

Quyền khi cài đặt

Hình ảnh bên trái là danh sách quyền khi cài đặt của một ứng dụng. Hình ảnh bên phải là một hộp thoại bật lên có 2 tuỳ chọn: cho phép và từ chối.
Hình 2. Danh sách quyền khi cài đặt của một ứng dụng xuất hiện trong cửa hàng ứng dụng.

Các quyền khi cài đặt cấp cho ứng dụng quyền truy cập giới hạn vào dữ liệu bị hạn chế. Các quyền này cho phép ứng dụng thực hiện các hành động bị hạn chế mà ảnh hưởng của các hành động đó đến hệ thống hoặc các ứng dụng khác là rất nhỏ. Khi khai báo quyền khi cài đặt trong ứng dụng, hệ thống sẽ tự động cấp cho ứng dụng các quyền này khi người dùng cài đặt ứng dụng. Cửa hàng ứng dụng sẽ hiện thông báo về quyền khi cài đặt cho người dùng khi họ xem trang chi tiết của ứng dụng, như minh hoạ trong Hình 2.

Trên Android, quyền khi cài đặt lại được chia thành một số loại nhỏ hơn như quyền thông thường và quyền chữ ký.

Quyền thông thường

Các quyền này cho phép truy cập vào dữ liệu và các hành động vượt ra khỏi hộp cát (sandbox) của ứng dụng. Tuy nhiên, dữ liệu và hành động ở đây có ít rủi ro đối với quyền riêng tư của người dùng và hoạt động của ứng dụng khác.

Hệ thống chỉ định mức bảo vệ "bình thường" ("normal") cho các quyền thông thường, như đã đưa ra trên trang tham chiếu API về quyền.

Quyền chữ ký

Nếu ứng dụng khai báo một quyền chữ ký mà một ứng dụng khác đã định nghĩa và nếu hai ứng dụng được ký bằng cùng một chứng chỉ, thì hệ thống sẽ cấp quyền cho ứng dụng đầu tiên tại thời điểm cài đặt. Nếu không, ứng dụng đầu tiên đó không được cấp quyền.

Hệ thống sẽ chỉ định cấp độ bảo vệ "chữ ký" ("signature") cho các quyền chữ ký, như đã đưa ra trên trang tham chiếu API về quyền.

Quyền khi bắt đầu chạy

Hộp thoại bật lên có 2 tuỳ chọn: cho phép và từ chối.
Hình 3. Lời nhắc về quyền hệ thống sẽ xuất hiện khi ứng dụng yêu cầu quyền khi bắt đầu chạy.

Quyền khi bắt đầu chạy (còn gọi là quyền nguy hiểm) cấp cho ứng dụng thêm quyền truy cập vào dữ liệu bị hạn chế. Những quyền này cho phép ứng dụng thực hiện các hành động bị hạn chế có ảnh hưởng đáng kể đến hệ thống và ứng dụng khác. Do đó, bạn cần yêu cầu quyền khi bắt đầu chạy trong ứng dụng trước khi có thể truy cập dữ liệu bị hạn chế hoặc thực hiện các hoạt động bị hạn chế. Khi ứng dụng yêu cầu quyền khi bắt đầu chạy, hệ thống sẽ hiện lời nhắc cấp quyền khi bắt đầu chạy, như minh hoạ trong Hình 3.

Nhiều quyền khi bắt đầu chạy sẽ truy cập vào dữ liệu riêng tư của người dùng, một loại dữ liệu đặc biệt bị hạn chế bao gồm cả thông tin có thể mang tính nhạy cảm. Có thể kể đến một số loại dữ liệu riêng tư của người dùng như thông tin vị trí và thông tin liên hệ.

Micrô và máy ảnh cung cấp quyền truy cập vào thông tin đặc biệt nhạy cảm. Chính vì vậy mà hệ thống sẽ giúp bạn giải thích lý do vì sao ứng dụng cần truy cập vào thông tin này.

Hệ thống sẽ chỉ định cấp độ bảo vệ "nguy hiểm" ("dangerous") cho các quyền khi bắt đầu chạy, như đã đưa ra trên trang tham chiếu API về quyền.

Quyền đặc biệt

Các quyền đặc biệt tương ứng với các thao tác cụ thể trong ứng dụng. Chỉ nền tảng và nhà sản xuất thiết bị gốc (OEM) mới có thể định nghĩa các quyền đặc biệt. Ngoài ra, nền tảng và OEM thường định nghĩa các quyền đặc biệt khi muốn bảo vệ quyền truy cập vào các thao tác đặc biệt có ảnh hưởng đáng kể, chẳng hạn như vẽ lên các ứng dụng khác.

Trang Quyền truy cập ứng dụng đặc biệt trong phần cài đặt hệ thống chứa một tập hợp các thao tác mà người dùng có thể bật/tắt. Nhiều thao tác trong số này được triển khai dưới dạng quyền đặc biệt.

Mỗi quyền đặc biệt lại có thông tin triển khai riêng. Hướng dẫn về cách sử dụng từng quyền đặc biệt có trên trang tham chiếu API về quyền. Hệ thống sẽ chỉ định cấp độ bảo vệ "appop" cho các quyền đặc biệt.

Những phương pháp hay nhất

Quyền cho ứng dụng được xây dựng dựa trên các tính năng bảo mật hệ thống và giúp Android hỗ trợ các mục tiêu sau đây liên quan đến quyền riêng tư của người dùng:

  • Quyền kiểm soát: Người dùng có quyền kiểm soát dữ liệu mà họ chia sẻ với ứng dụng.
  • Tính minh bạch: Người dùng hiểu được ứng dụng sử dụng loại dữ liệu nào và lý do ứng dụng truy cập vào loại dữ liệu đó.
  • Giảm tối đa việc thu thập dữ liệu: Ứng dụng chỉ truy cập và sử dụng dữ liệu cần thiết cho một thao tác hoặc hành động cụ thể mà người dùng yêu cầu.

Phần này trình bày một tập hợp các phương pháp cốt lõi hay nhất để sử dụng hiệu quả các quyền cho ứng dụng. Để biết thêm thông tin về cách bạn có thể sử dụng quyền trên Android, hãy truy cập trang các phương pháp hay nhất về quyền cho ứng dụng.

Yêu cầu số lượng quyền tối thiểu

Khi người dùng yêu cầu một hành động cụ thể trong ứng dụng, thì ứng dụng chỉ nên yêu cầu các quyền cần thiết để hoàn thành hành động đó. Tuỳ thuộc vào cách bạn sử dụng quyền, có thể có một cách thay thế để thực hiện trường hợp sử dụng ứng dụng mà không cần đến quyền truy cập vào thông tin nhạy cảm.

Liên kết quyền khi bắt đầu chạy với các hành động cụ thể

Yêu cầu quyền trong luồng sử dụng ứng dụng càng muộn càng tốt. Ví dụ: nếu ứng dụng cho phép người dùng gửi tin nhắn thoại cho người khác, hãy chờ cho đến khi người dùng chuyển đến màn hình nhắn tin và nhấn nút Gửi tin nhắn thoại. Sau khi người dùng nhấn nút, ứng dụng có thể yêu cầu cấp quyền truy cập vào micrô.

Xem xét các phần phụ thuộc của ứng dụng

Khi thêm một thư viện, bạn cũng kế thừa các yêu cầu về quyền của thư viện đó. Hãy lưu ý về những quyền mà mỗi loại phụ thuộc yêu cầu và những quyền này dùng để làm gì.

Minh bạch

Khi bạn đưa ra một yêu cầu cấp quyền, hãy nêu rõ dữ liệu bạn sẽ truy cập và lý do truy cập để người dùng có thể đưa ra quyết định sáng suốt.

Nêu rõ ràng các quyền truy cập hệ thống

Khi bạn truy cập vào phần cứng hoặc dữ liệu nhạy cảm, chẳng hạn như máy ảnh hoặc micrô, hãy cung cấp chỉ báo liên tục trong ứng dụng nếu hệ thống chưa đưa ra các chỉ báo như vậy. Lời nhắc này giúp người dùng biết chính xác thời điểm ứng dụng truy cập vào dữ liệu bị hạn chế hoặc thực hiện các hành động bị hạn chế.

Quyền trong các thành phần hệ thống

Quyền không chỉ để yêu cầu chức năng của hệ thống. Các thành phần hệ thống của ứng dụng có thể hạn chế những ứng dụng khác có thể tương tác với ứng dụng, như đưa ra trên trang về cách hạn chế hoạt động tương tác với ứng dụng khác.

Tài nguyên khác

Để tìm hiểu thêm về quyền cho ứng dụng trên Android, hãy tham khảo thêm một số tài nguyên sau đây:

Mẫu