Bắt đầu Liên kết Tài khoản Google ngay trên nền tảng của bạn.

Liên kết tài khoản có thể được hoàn thành trực tiếp trong ứng dụng dành cho thiết bị di động của bạn, cho phép người dùng liên kết tài khoản của bạn trên dịch vụ của bạn với Tài khoản Google của họ. Đường liên kết đã thiết lập cấp cho Google quyền truy cập vào dữ liệu mà người dùng đồng ý chia sẻ.

Các lợi ích dành cho người dùng bao gồm:

  • Người dùng có thể bắt đầu và hoàn tất quy trình liên kết tài khoản trong ứng dụng của bạn, một môi trường mà họ đã quen thuộc.
  • Người dùng không yêu cầu thông tin đăng nhập vì họ đã được xác thực trên thiết bị này và trong ứng dụng dành cho thiết bị di động của bạn.

Dưới đây là các lợi ích dành cho nhà phát triển:

  • Kiểm soát việc quảng cáo và bắt đầu liên kết tài khoản trong ứng dụng dành cho thiết bị di động của bạn, ví dụ: trong phần cài đặt người dùng, trên quảng cáo xen kẽ hoặc sau khi người dùng đăng nhập vào ứng dụng dành cho thiết bị di động của bạn. Việc thêm nhiều điểm nhập để bắt đầu liên kết tài khoản giúp tăng khả năng liên kết tài khoản , nhờ đó tăng số lượt tương tác và số lượng tài khoản được liên kết.
  • Tỷ lệ chuyển đổi tăng vì người dùng có thể hoàn tất quá trình liên kết bằng ít bước hơn so với quy trình OAuth chuẩn web dựa trên web.
  • Yêu cầu kỹ thuật thấp để triển khai Liên kết từ Nền tảng của bạn (Android) vì quy trình này sử dụng cách triển khai OAuth2.0 hiện có của bạn, giả sử bạn đã triển khai quy trình này.
  • Giảm tỷ lệ bỏ ngang vì người dùng không cần nhập lại thông tin đăng nhập của họ và có thể hoàn thành quá trình này bằng ít bước hơn. Tỷ lệ bỏ ngang có thể lên tới 80% trong các luồng mà người dùng bắt buộc phải thu hồi và nhập thông tin đăng nhập của họ.

Cách hoạt động

Quá trình liên kết từ Nền tảng của bạn được hoàn tất theo các bước sau:

  1. Người dùng sẽ nhấp vào / bật/tắt trình kích hoạt liên kết trên ứng dụng dành cho thiết bị di động của bạn.
  2. Người dùng chọn Tài khoản Google cần liên kết.
    1. Người dùng chọn một Tài khoản Google hiện có trên thiết bị để liên kết hoặc đăng nhập bằng một tài khoản mới
  3. Người dùng sẽ nhìn thấy màn hình xin phép do Google lưu trữ và phải đồng ý tiếp tục hoặc huỷ để dừng quá trình liên kết.
  4. Người dùng sẽ thấy màn hình xin phép và họ phải đồng ý tiếp tục hoặc huỷ để dừng quá trình liên kết.
  5. Mối liên kết này được thiết lập giữa tài khoản của người dùng, trên dịch vụ của bạn và Tài khoản Google của họ.

Hình 1 Liên kết từ Luồng nền tảng

Yêu cầu

Để triển khai Đường liên kết trên nền tảng của mình, bạn cần có:

  • Ứng dụng Android.
  • Sở hữu, quản lý và duy trì một máy chủ OAuth 2.0 hỗ trợ quy trình mã uỷ quyền OAuth 2.0.

Thiết lập

Trước khi tiến hành các bước bên dưới, bạn phải hoàn tất quy trình đăng ký tính năng Liên kết tài khoản.

Thiết lập môi trường phát triển

Tải các dịch vụ mới nhất của Dịch vụ Google Play trên máy chủ phát triển của bạn:

  1. Mở Trình quản lý SDK Android.
  1. Trong phần SDK Tools (Bộ công cụ SDK), hãy tìm Dịch vụ Google Play.

  2. Nếu trạng thái của các gói này là chưa Cài đặt, hãy chọn cả hai gói rồi nhấp vào Install Packages (Cài đặt gói).

Định cấu hình ứng dụng

  1. Trong tệp build.gradle ở cấp dự án, hãy đưa kho lưu trữ Maven của Google vào cả hai phần buildscriptallprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. Thêm các phần phụ thuộc cho API "Link with Google" (Liên kết với Google) vào tệp gradle cấp ứng dụng của mô-đun, thường là app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:21.2.0'
    }
    

Đường liên kết từ quy trình trên Nền tảng của bạn sẽ dẫn đến mã truy cập do dịch vụ của bạn cung cấp và được Google lưu. Bạn phải nhận được sự đồng ý trước khi trả lại mã thông báo cho người dùng.

Hãy làm theo các bước bên dưới để nhận được sự đồng ý của người dùng và trả về mã thông báo mã xác thực qua SDK Dịch vụ Google Play.

  1. Xây dựng một PendingIntent có thể khởi chạy hoạt động đồng ý của bạn – Sự đồng ý được API Dịch vụ Play khởi chạy. Bạn sẽ cần cung cấp PendingIntent (gọi là consentPendingIntent để cho rõ ràng) khi API được gọi

    Kotlin

    // Build a PendingIntent that can launch the consent activity
    val consentPendingIntent = buildConsentPendingIntent()
    

    Java

    // Build a PendingIntent that can launch your consent activity
    PendingIntent consentPendingIntent =
              buildConsentPendingIntent();
    
  2. Tạo Hoạt động tương ứng để xử lý ý định đồng ý

    Kotlin

      class ConsentActivity : AppCompatActivity
    
      private fun onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature
          // of the following call)
          val token = getToken()
          val intent = Intent()
                      .putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN,
                                token)
          setResult(Activity.RESULT_OK, intent)
          finish()
      }
    
      private fun onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED)
          finish()
      }
    

    Java

      public class ConsentActivity extends AppCompatActivity {
        ...
        private void onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature of
          // the following call
          String token = getToken();
          Intent intent = new Intent();
          intent.putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token);
          setResult(Activity.RESULT_OK, intent);
          finish();
        }
    
        private void onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED, null);
          finish();
        }
     }
    
    

    Chúng tôi giả định rằng các phương thức onConsentAccpeted()onConsentRejectedOrCanceled() sẽ được gọi nếu người dùng lần lượt chấp nhận hoặc từ chối/huỷ đồng ý của bạn.

  3. Tạo yêu cầu lưu mã thông báo và truyền PendingIntent được tạo ở bước 1 ở trên, cùng với các tham số cấu hình khác.

    Kotlin

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      val activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult())
        { result ->
          if (result.resultCode == RESULT_OK) {
            // Successfully finished the flow and saved the token
          } else {
            // Flow failed, for example the user may have canceled the flow
          }
        }
    
      // Build token save request
      val request = SaveAccountLinkingTokenRequest.builder()
        .setTokenType(SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
        .setConsentPendingIntent(consentPendingIntent)
        .setServiceId("service-id-of-and-defined-by-developer")
        //Set the scopes that the token is valid for on your platform
        .setScopes(scopes)
        .build()
    
       // Launch consent activity and retrieve token
       Identity.getCredentialSavingClient(this)
         .saveAccountLinkingToken(request)
         .addOnSuccessListener( saveAccountLinkingTokenResult -> {
            if (saveAccountLinkingTokenResult.hasResolution()) {
              val pendingIntent = saveAccountLinkingTokenResult
                                  .getPendingIntent()
              val intentSenderRequest = IntentSenderRequest
                                        .Builder(pendingIntent).build()
              activityResultLauncher.launch(intentSenderRequest)
            } else {
               // This should not happen, let’s log this
               Log.e(TAG, "Failed to save token");
            }
          })
          .addOnFailureListener(e -> Log.e(TAG, “Failed to save token”, e))
    

    Java

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      ActivityResultLauncher<IntentSenderRequest>
          activityResultLauncher =
          registerForActivityResult(new ActivityResultContracts
                                        .StartIntentSenderForResult(),
                                    result -> {
          if (result.getResultCode() == RESULT_OK) {
              // Successfully finished the flow and saved the token
          } else {
              // Flow failed, for example the user may have canceled the flow
          }
      });
    
     // Build token save request
     SaveAccountLinkingTokenRequest request =
        SaveAccountLinkingTokenRequest.builder()
            .setTokenType(
                SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
            .setConsentPendingIntent(consentPendingIntent)
            .setServiceId("service-id-of-and-defined-by-developer")
            //Set the scopes that the token is valid for on your platform
            .setScopes(scopes)
            .build();
    
      // Launch consent activity and retrieve token
      Identity.getCredentialSavingClient(this)
          .saveAccountLinkingToken(request)
          .addOnSuccessListener(
              saveAccountLinkingTokenResult -> {
                if (saveAccountLinkingTokenResult.hasResolution()) {
                  // Launch the resolution intent
                  PendingIntent pendingIntent =
                      saveAccountLinkingTokenResult.getPendingIntent();
                  IntentSenderRequest intentSenderRequest =
                      new IntentSenderRequest.Builder(pendingIntent).build();
                  activityResultLauncher.launch(intentSenderRequest);
                } else {
                  // This should not happen, let’s log this
                  Log.e(TAG, "Failed to save token");
                }
              })
          .addOnFailureListener(e -> Log.e(TAG, "Failed to save token", e));
      ```
    

Các bước trên nhắc người dùng đồng ý và trả về mã uỷ quyền cho Google.

Các phương pháp hay nhất

  • Ứng dụng của bạn phải cho người dùng biết trạng thái liên kết thông qua nút, nút bật/tắt hoặc một thành phần hình ảnh tương tự.

    Hình 1 Hình ảnh mẫu về trạng thái của đường liên kết

  • Bạn nên thông báo cho người dùng sau khi liên kết thành công, ví dụ: hiện một thông báo ngắn, kích hoạt thay đổi trạng thái bật/tắt hoặc chuyển hướng người dùng đến một trang liên kết thành công riêng biệt.

  • Bạn nên cân nhắc việc nhắc người dùng trong ứng dụng liên kết tài khoản, tốt nhất là dựa trên các tín hiệu rõ ràng cho thấy việc liên kết sẽ mang lại lợi ích cho những người dùng đó.

  • Sau khi liên kết thành công, bạn nên cung cấp cho người dùng ví dụ về việc cần làm với tài khoản được liên kết, ví dụ: nếu bạn vừa liên kết với một dịch vụ phát nhạc trực tuyến, hãy yêu cầu Trợ lý Google phát nhạc.

  • Cho phép người dùng quản lý các tài khoản được liên kết của họ, bao gồm cả lựa chọn huỷ liên kết họ. Hướng họ đến trang quản lý Tài khoản được liên kết của Google, tức là https://myaccount.google.com/accountlinking.

Tài liệu tham khảo

Tài liệu tham khảo về API xác thực Android