Vào ngày 05/10/2021, phương thức Đăng nhập bằng Facebook sẽ không hỗ trợ các trình duyệt nhúng trên Android (Chế độ xem web) để xác thực người dùng nữa.

Để biết thông tin cơ bản về việc ngừng hỗ trợ này, hãy xem bài viết trên blog Ngừng hỗ trợ xác thực phương thức Đăng nhập bằng Facebook trên các trình duyệt nhúng trên Android.

Để biết thông tin về việc ngừng hỗ trợ Chế độ xem web và sử dụng Tab tùy chỉnh thay thế, hãy xem phần Ngừng hỗ trợ Chế độ xem web trên Android.

Đăng nhập bằng Facebook dành cho Android - Bắt đầu nhanh

Facebook SDK dành cho Android cho phép mọi người đăng nhập vào ứng dụng qua phương thức Đăng nhập bằng Facebook. Khi mọi người đăng nhập vào ứng dụng bằng Facebook, họ có thể cấp quyền cho ứng dụng để bạn có thể truy xuất thông tin hoặc thực hiện hành động trên Facebook thay mặt họ.

Để biết dự án mẫu minh họa cách tích hợp phương thức Đăng nhập bằng Facebook vào ứng dụng Android, hãy xem FBLoginSample trên GitHub.

Hãy làm theo các bước dưới đây để thêm phương thức Đăng nhập bằng Facebook vào ứng dụng của bạn.

1. Đăng nhập

Vui lòng đăng nhập Facebook để tạo ứng dụng hoặc đăng ký với tư cách nhà phát triển.

2. Tải xuống ứng dụng Facebook

Tải xuống ứng dụng Facebook bằng cách nhấp vào nút bên dưới.

3. Tích hợp Facebook SDK

SDK Đăng nhập bằng Facebook dành cho Android là một thành phần của Facebook SDK dành cho Android. Để sử dụng SDK Đăng nhập bằng Facebook trong dự án của bạn, hãy tải xuống hoặc biến SDK này thành phần phụ thuộc trong Maven. Để hỗ trợ các thay đổi trong Android 11, hãy sử dụng SDK phiên bản 8.1 trở lên.

Sử dụng Maven

  1. Trong dự án của bạn, hãy mở your_app > Gradle Scripts > build.gradle (Project) và đảm bảo kho lưu trữ sau có trong buildscript { repositories {}}:
    mavenCentral() 
    
  2. Trong dự án của bạn, hãy mở your_app > Gradle Scripts > build.gradle (Module: app) rồi thêm câu lệnh triển khai sau vào phần dependencies{} để dựa vào phiên bản mới nhất của SDK Đăng nhập bằng Facebook:
     implementation 'com.facebook.android:facebook-login:latest.release'
    
  3. Xây dựng dự án của bạn.

4. Chỉnh sửa tài nguyên và tệp kê khai

Nếu sử dụng Facebook SDK dành cho Android phiên bản 5.15 trở lên, bạn không cần thêm bộ lọc hoạt động hoặc bộ lọc mục đích cho Tab tùy chỉnh của Chrome. SDK đã bao gồm chức năng này.

Sau khi bạn tích hợp phương thức Đăng nhập bằng Facebook, hệ thống sẽ tự động ghi và thu thập một số Sự kiện trong ứng dụng cho Trình quản lý sự kiện, trừ khi bạn tắt tính năng Tự động ghi sự kiện trong ứng dụng. Để biết chi tiết về loại thông tin được thu thập và cách tắt tính năng tự động ghi sự kiện trong ứng dụng, hãy xem bài viết Tự động ghi sự kiện trong ứng dụng.

Tạo chuỗi cho ID ứng dụng trên Facebook và những chuỗi cần thiết để bật Tab tùy chỉnh của Chrome. Ngoài ra, hãy thêm FacebookActivity vào file kê khai trong Android.
  1. Mở file /app/res/values/strings.xml của bạn.
  2. Thêm các thành phần string có tên là facebook_app_id, fb_login_protocol_schemefacebook_client_token, sau đó đặt những giá trị này thành ID ứng dụngMã ứng dụng của bạn. Ví dụ: nếu bạn có ID ứng dụng là 1234 và mã ứng dụng là 56789 thì mã của bạn sẽ có dạng như sau:
    <string name="facebook_app_id">1234</string>
    <string name="fb_login_protocol_scheme">fb1234</string>
    <string name="facebook_client_token">56789</string>
    
    
  3. Mở file /app/manifest/AndroidManifest.xml.
  4. Thêm các thành phần meta-data vào thành phần application cho ID ứng dụng và mã ứng dụng của bạn:
    <application android:label="@string/app_name" ...>
        ...
       	<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
       	<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
    
  5. Thêm hoạt động cho Facebook, cũng như bộ lọc hoạt động và mục đích cho Tab tùy chỉnh của Chrome bên trong thành phần application của bạn:
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                    "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
    
  6. Thêm thành phần uses-permission vào file kê khai sau thành phần application:
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. (Không bắt buộc) Để chọn không cấp Quyền đối với ID quảng cáo, hãy thêm thành phần uses-permission vào file kê khai sau thành phần application:
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
            
  8. Bạn có thể trực tiếp đặt tính năng tự động ghi Sự kiện trong ứng dụng thành "true" hoặc "false" bằng cách đặt cờ AutoLogAppEventsEnabled trong file AndroidManifest.xml.

  9. Xây dựng dự án của bạn.

5. Liên kết tên gói và lớp mặc định với ứng dụng của bạn

Bạn cần đăng nhập để hoàn thành bước này.

6. Cung cấp hash khóa phát hành và phát triển cho ứng dụng

Bạn cần đăng nhập để hoàn thành bước này.

7. Bật đăng nhập một lần cho ứng dụng của bạn

Bạn cần đăng nhập để hoàn thành bước này.

8. Thêm nút Đăng nhập bằng Facebook

Cách đơn giản nhất để thêm phương thức Đăng nhập bằng Facebook vào ứng dụng của bạn là thêm LoginButton từ SDK. LoginButton là một thành phần giao diện người dùng bọc chức năng có trong LoginManager. Khi ai đó nhấp vào nút này, quá trình đăng nhập sẽ bắt đầu với các quyền được đặt trong LoginManager. Người dùng bên ngoài phải có quyền public_profile nâng cao thì mới sử dụng được phương thức Đăng nhập bằng Facebook. Nút này hoạt động theo trạng thái đăng nhập và hiển thị văn bản chính xác dựa trên trạng thái xác thực của một người nào đó.
Để thêm nút Đăng nhập bằng Facebook, trước tiên, bạn cần thêm nút này vào file XML bố cục của mình:
<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" /> 

9. Đăng ký gọi lại

Bây giờ, hãy tạo callbackManager để xử lý phản hồi đăng nhập bằng cách gọi CallbackManager.Factory.create.
callbackManager = CallbackManager.Factory.create();
Nếu đang thêm nút này vào một Phân khúc, bạn cũng phải cập nhật hoạt động của mình thì mới sử dụng được phân khúc đó. Bạn có thể tùy chỉnh các thuộc tính của Login button và đăng ký lệnh gọi lại trong phương thức onCreate() hoặc onCreateView(). Những thuộc tính bạn có thể tùy chỉnh bao gồm LoginBehavior, DefaultAudience, ToolTipPopup.Style và các quyền trên LoginButton. Ví dụ:
      
    private static final String EMAIL = "email";
      
    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList(EMAIL));
    // If you are using in a fragment, call loginButton.setFragment(this);    

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
        }

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });
Để phản hồi kết quả đăng nhập, bạn cần đăng ký lệnh gọi lại bằng LoginManager hoặc LoginButton. Nếu bạn đăng ký lệnh gọi lại bằng LoginButton thì không cần đăng ký lệnh gọi lại trên trình quản lý Đăng nhập.
Bạn thêm lệnh gọi lại LoginManager vào hoạt động của mình hoặc phương thức onCreate() của phân khúc:
    callbackManager = CallbackManager.Factory.create();      
      
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                }

                @Override
                public void onCancel() {
                     // App code
                }

                @Override
                public void onError(FacebookException exception) {
                     // App code   
                }
    });
Nếu đăng nhập thành công, thông số LoginResult sẽ có AccessToken mới cũng như các quyền đã cấp hoặc từ chối gần đây nhất.
Không nhất thiết phải có registerCallback để đăng nhập thành công, bạn có thể chọn theo dõi những thay đổi hiện tại về mã truy cập thông qua lớp AccessTokenTracker được mô tả bên dưới.
Cuối cùng, trong phương thức onActivityResult, hãy gọi callbackManager.onActivityResult để chuyển kết quả đăng nhập vào LoginManager qua callbackManager.

Nếu đang sử dụng hoạt động hoặc phân khúc của AndroidX, bạn không phải ghi đè "onActivityResult".

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
Mọi hoạt động và phân khúc mà bạn tích hợp với nút Đăng nhập hoặc Chia sẻ của FacebookSDK đều sẽ chuyển tiếp onActivityResult đến callbackManager.

10. Kiểm tra trạng thái đăng nhập

Ứng dụng của bạn chỉ có thể có một người đăng nhập mỗi lần và LoginManager sẽ đặt AccessTokenProfile hiện tại cho người đó. Facebook SDK lưu dữ liệu này trong tùy chọn được chia sẻ và đặt ở đầu phiên. Bạn có thể xem một người đã đăng nhập chưa bằng cách kiểm tra AccessToken.getCurrentAccessToken()Profile.getCurrentProfile().
Bạn có thể tải AccessToken.getCurrentAccessToken với SDK từ bộ nhớ đệm hoặc từ dấu trang của ứng dụng khi ứng dụng của bạn khởi chạy nguội. Bạn nên kiểm tra tính hiệu lực của mã tại phương thức onCreate của Activity:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
Sau đó, bạn có thể thực hiện đăng nhập thực sự, chẳng hạn như trong OnClickListener của một nút tùy chỉnh:
      
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

11. Bật Đăng nhập tốc hành

Với phương thức Đăng nhập nhanh, người dùng có thể đăng nhập bằng tài khoản Facebook của họ trên nhiều thiết bị và nền tảng. Nếu một người đăng nhập vào ứng dụng của bạn trên Android rồi thay đổi các thiết bị, phương thức Đăng nhập nhanh sẽ cho phép người đó đăng nhập bằng tài khoản Facebook của họ, thay vì yêu cầu họ chọn một phương thức đăng nhập. Điều này nhằm tránh tạo ra các tài khoản trùng lặp hoặc thậm chí là không thể đăng nhập được. Để hỗ trợ các thay đổi trong Android 11, trước tiên, hãy thêm mã sau vào thành phần queries trong file /app/manifest/AndroidManifest.xml của bạn.
  
<queries> <package android:name="com.facebook.katana" /> </queries>   
Mã sau cho biết cách bật tính năng Đăng nhập nhanh.
LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() { @Override public void onCompleted(AccessToken accessToken) { // User was previously logged in, can log them in directly here. // If this callback is called, a popup notification appears that says // "Logged in as <User Name>" } @Override public void onFailure() { // No access token could be retrieved for the user } @Override public void onError(Exception exception) { // An error occurred } });   

Bước tiếp theo

Chúc mừng! Bạn đã thêm phương thức Đăng nhập bằng Facebook vào ứng dụng Android của mình! Hãy nhớ tham khảo các trang tài liệu khác của chúng tôi để biết thêm hướng dẫn nâng cao.
Triển khai lệnh gọi lại xóa dữ liệu để phản hồi yêu cầu của mọi người về việc xóa dữ liệu của họ khỏi Facebook.
Theo dõi mã truy cập và trang cá nhân của người dùng.
Quản lý dữ liệu mà ứng dụng của bạn có quyền truy cập thông qua phương thức Đăng nhập bằng Facebook.
Bạn gặp sự cố khi tích hợp phương thức Đăng nhập bằng Facebook? Hãy xem danh sách sự cố thường gặp và cách giải quyết.
Tùy theo dữ liệu Facebook mà bạn yêu cầu từ những người sử dụng phương thức Đăng nhập bằng Facebook, có thể bạn cần gửi ứng dụng của mình để xét duyệt trước khi ra mắt ứng dụng.
Hãy xem phần Tạo quy trình đăng nhập theo cách thủ công để tạo quy trình đăng nhập của riêng bạn.