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ẻ.

Phương pháp này cải thiện hiệu suất liên kết tài khoản bằng cách thu hút người dùng trong ngữ cảnh quen thuộc của ứng dụng thay vì một cuộc trò chuyện với Trợ lý. Hoạt động này có thể được tích hợp vào hoạt động giới thiệu cho người dùng, chế độ cài đặt và các nền tảng khác của ứng dụng, tạo ra cơ hội cho việc khám phá và tương tác với Hành động của bạn trên Trợ lý Google. Ví dụ: sau khi liên kết, bạn có thể đề nghị đưa người dùng đến thẳng Hành động của bạn.

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

Bạn có thể hoàn tất việc liên kết từ Nền tảng của mình theo các bước sau:

  1. Người dùng sẽ nhấp/bật/tắt một trình kích hoạt liên kết trên ứng dụng di động của bạn.
  2. Người dùng chọn Tài khoản Google để 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ẽ thấy màn hình yêu cầu đồng ý 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 yêu cầu đồng ý và phải đồng ý để tiếp tục hoặc huỷ để dừng quy trình liên kết.
  5. Mối liên kết đượ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 tính năng Liên kết từ nền tảng của mình, bạn cần có:

  • Một ứ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 thực hiện 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 Dịch vụ Google Play mới nhất trên máy chủ phát triể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 Google Play services.

  2. Nếu trạng thái của các gói này không phải là Đã cài đặt, hãy chọn cả hai gói rồi nhấp vào 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 thêm kho lưu trữ Maven của Google vào cả mục buildscriptallprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. Thêm các phần phụ thuộc cho API "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.3.0'
    }
    

Quy trình Liên kết từ nền tảng của bạn sẽ giúp Google lưu mã thông báo truy cập do dịch vụ của bạn cung cấp. Bạn phải nhận được sự đồng ý trước khi trả về 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 thông qua SDK Dịch vụ Google Play.

  1. Tạo một PendingIntent có thể khởi chạy hoạt động đồng ý – Hoạt động đồng ý được khởi chạy bằng API Dịch vụ Play. Bạn sẽ cần cung cấp PendingIntent (để rõ ràng hơn, chúng tôi sẽ gọi là consentPendingIntent) khi gọi API

    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 chấp nhận hoặc từ chối/huỷ sự đồng ý của bạn.

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

    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 sẽ nhắc người dùng đồng ý và trả về một 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 của đường liên kết thông qua một 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 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 thị 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 thành công liên kết riêng.

  • 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, lý tưởng nhất là dựa trên các tín hiệu mạnh mẽ 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 đưa ra cho người dùng ví dụ về những việc cần làm với tài khoản đã liên kết, ví dụ: nếu bạn vừa liên kết 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 đã liên kết, bao gồm cả lựa chọn huỷ liên kết các tài khoản đó. Hướng dẫn họ truy cập vào 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