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 thức 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 qua những bước sau:

  1. Người dùng sẽ nhấp/bật/tắt một điều kiện 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ẽ 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 quy trình liên kết.
  4. Người dùng sẽ nhìn thấy màn hình đồng ý của bạn 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ừ Quy trình 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ó:

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

Thiết lập

Trước khi tiến hành bằng các bước bên dưới, bạn phải hoàn tất quy trình đăng ký 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 Google Play trên máy chủ phát triển của bạn:

  1. Mở Android SDK Manager (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 (Dịch vụ Google Play).

  2. Nếu trạng thái của các gói này là Không phải là Đã cài đặt, hãy chọn cả hai 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 đư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 trong mô-đun của bạn, thường là app/build.gradle:

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

Đường liên kết từ quy trình trên Nền tảng của bạn sẽ tạo ra một mã truy cập (do dịch vụ của bạn cung cấp) đượ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 dưới đây để nhận được sự đồng ý của người dùng và trả về mã thông báo xác thực thông qua SDK Dịch vụ Google Play.

  1. Tạo một PendingIntent có thể chạy hoạt động yêu cầu đồng ý – Sự đồng ý do API Dịch vụ Play phát hành. Bạn cần cung cấp một PendingIntent (được gọi là consentPendingIntent để đảm bảo sự 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 chấp nhận hoặc từ chối/huỷ sự đồng ý của bạn tương ứng.

  3. Tạo một yêu cầu lưu mã thông báo và cùng với các tham số cấu hình khác, hãy truyền PendingIntent đã tạo trong 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ã uỷ quyền cho Google.

Những 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 với người dùng 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 trạng thái của đường liên kết mẫu

  • 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 riêng biệt về việc liên kết thành cô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, 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ẽ có lợi 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 một ví dụ về những 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 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ãy 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