Quản lý quyền dành cho Android

Trong quá trình đăng nhập cơ bản, ứng dụng của bạn nhận được quyền truy cập vào trang cá nhân công khai và email của một người. Để truy cập thông tin bổ sung trên trang cá nhân hoặc thay mặt ai đó đăng nội dung lên Facebook, bạn cần yêu cầu các quyền cần thiết:

  • Các trường mặc định trên trang cá nhân công khai - Cấp quyền truy cập vào thông tin cơ bản trên trang cá nhân.

  • Quyền đọc - Tất cả thông tin khác mà ai đó thêm vào trang cá nhân Facebook của họ đều được bảo vệ bằng những quyền đọc khác.

  • Quyền ghi - Các ứng dụng cần quyền đăng riêng biệt để đăng nội dung thay mặt người đó.

Sau đây là những cách quản lý quyền trong ứng dụng của bạn:

  • Khi ứng dụng gửi yêu cầu trên Facebook cho ai đó, bạn nên kiểm tra các quyền cần thiết và yêu cầu các quyền đó nếu cần.

  • Ứng dụng của bạn phải xử lý các lỗi thiếu quyền từ Facebook bằng cách yêu cầu quyền và thử lại.

  • Mọi người dùng ứng dụng của bạn có thể thu hồi quyền trên Facebook nhưng bạn cũng có thể triển khai điều này trong ứng dụng của mình.

  • Bạn cũng có thể cho phép mọi người gỡ đặc quyền đăng nhập cơ bản khỏi ứng dụng của mình bằng cách triển khai một cơ chế thu hồi hoàn toàn quyền đăng nhập.

Tìm hiểu thêm về các quyền có sẵn khác nhau trong Hướng dẫn về quyền.

Mọi người đều nhạy cảm với vấn đề cấp quyền đăng. Vì vậy, bạn chỉ nên yêu cầu quyền đăng sau khi một người đã sẵn sàng đăng nội dung nào đó từ ứng dụng của bạn, chứ không phải trong lần đăng nhập đầu tiên.

Nhận thêm quyền

Trong quá trình đăng nhập cơ bản, ứng dụng của bạn nhận được quyền truy cập vào trang cá nhân công khai và email của một người. Để truy cập thông tin bổ sung trên trang cá nhân hoặc đăng nội dung lên Facebook thay mặt họ, bạn cần yêu cầu các quyền cần thiết.

Ở đây, chúng tôi có user_status. Bạn có thể chuyển những quyền này vào nút LoginButton hoặc một giao diện người dùng tùy chỉnh cho các quyền đăng nhập.

Trong lớp MainFragment, hãy sửa đổi mã trong onCreateView():

...
LoginButton authButton = (LoginButton)view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList("user_status"));

return view;
...

Nhận quyền đọc

LoginManager là một thực thể singleton và hoạt động với currentAccessToken của AccessToken. Sau khi đăng nhập thành công, currentAccessToken sẽ được đặt. Để yêu cầu thêm quyền, bạn chỉ cần gọi phương thức logInWithPermissionName.

Phương thức logInWithPermissionName luôn mở ra một giao diện người dùng và nhắc ai đó cấp quyền bổ sung nếu cần. Để có thêm quyền từ ai đó, hãy tạo yêu cầu này với Facebook SDK dành cho Android:

LoginManager.getInstance().logInWithReadPermissions(
    fragmentOrActivity,
    Arrays.asList("email"));

Sử dụng lệnh này để yêu cầu quyền ngoài quyền mà ứng dụng đã được cấp. Bạn có thể sử dụng lệnh này sau khi đăng nhập lần đầu.

Bạn có thể yêu cầu nhiều quyền đọc nêu trong Tài liệu tham khảo về quyền.

Nhận quyền đăng

Bạn có thể yêu cầu số quyền đọc hoặc quyền đăng bất kỳ trong khi đăng nhập. Việc yêu cầu hơn 4 quyền khiến số lần đăng nhập hoàn tất giảm đáng kể.

Kể từ ngày 24/04/2018, chúng tôi đã gỡ quyền pubish_actions. Vui lòng xem Nhật ký về các thay đổi quan trọng để biết thêm thông tin chi tiết. Để người dùng ứng dụng có cách chia sẻ nội dung lên Facebook, bạn nên sử dụng tính năng Chia sẻ sản phẩm của chúng tôi.

Việc yêu cầu quyền đăng với publish_actions trong khi đăng nhập sẽ tạo ra một bước thứ hai trong giao diện người dùng đăng nhập. Do đó, bạn nên yêu cầu số quyền đọc tối thiểu trong khi đăng nhập rồi yêu cầu thêm quyền hoặc quyền đăng khác khi ai đó thực sự cần các quyền đó. Để tối ưu hóa các yêu cầu về quyền, hãy xem phần Tối ưu hóa các quyền.

Để yêu cầu quyền đăng trong ứng dụng của mình, bạn có thể sử dụng LoginManager.

LoginManager.getInstance().logInWithPublishPermissions(
    fragmentOrActivity,
    Arrays.asList("publish_actions"));

Lệnh này yêu cầu các quyền ngoài quyền mà ứng dụng đã nhận được trong quá trình đăng nhập.

Yêu cầu lại quyền

Mọi người có thể chỉ cấp một nhóm nhỏ quyền mà bạn yêu cầu, ngoại trừ quyền public profile được cấp lúc đăng nhập.

Để lấy danh sách các quyền được liên kết với mã truy cập hiện tại, hãy gọi:

AccessToken.getCurrentAccessToken().getPermissions();

Để lấy danh sách các quyền bị từ chối, hãy gọi:

AccessToken.getCurrentAccessToken().getDeclinedPermissions();

Ứng dụng của bạn phải xử lý trường hợp ai đó đã từ chối cấp cho ứng dụng một trong những quyền bạn yêu cầu. Nếu ứng dụng của bạn phải có một trong những quyền bị từ chối để hoạt động, bạn có thể yêu cầu lại quyền đó bằng cách sử dụng LoginManager như trong ví dụ ở trên.

Xét duyệt đăng nhập

Khi bạn triển khai Đăng nhập bằng Facebook, ứng dụng có thể tùy ý yêu cầu ai đó cấp quyền trên tập hợp dữ liệu con của người đó.

Nếu ứng dụng yêu cầu không chỉ các trường mặc định trên trang cá nhân công khai và email, Facebook phải xét duyệt ứng dụng này trước khi bạn phát hành. Tìm hiểu thêm về quá trình xét duyệt và điều cần thiết để thông qua xét duyệt.

Hướng dẫn về Xét duyệt đăng nhập