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
Bạn có thể hoàn tất việc liên kết từ Nền tảng theo các bước sau:
- Người dùng sẽ nhấp / bật một trình kích hoạt liên kết trên ứng dụng di động của bạn.
- Người dùng chọn Tài khoản Google để liên kết.
- 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
- Người dùng sẽ thấy màn hình đồng ý 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.
- Người dùng sẽ 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.
- 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ừ Platform Flow
Yêu cầu
Để triển khai tính năng Liên kết từ nền tảng của bạn, bạn cần có những điều sau:
- 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 tiếp tục 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ý 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 của bạn:
Trong phần SDK Tools (Bộ công cụ SDK), hãy tìm Dịch vụ Google Play.
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 Cài đặt gói.
Định cấu hình ứng dụng
Trong tệp
build.gradle
cấp dự án, hãy thêm kho lưu trữ Maven của Google vào cả hai mụcbuildscript
vàallprojects
.buildscript { repositories { google() } } allprojects { repositories { google() } }
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.4.0' }
Thêm tính năng hỗ trợ cho Link from your Platform
Quy trình Liên kết từ nền tảng sẽ dẫn đến việc Google lưu mã 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ả 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ã uỷ quyền thông qua SDK Dịch vụ Google Play.
Tạo một PendingIntent có thể chạy hoạt động đồng ý của bạn – Sự đồng ý được chạy bằng Play Services API. Bạn sẽ cần cung cấp một
PendingIntent
(được gọi làconsentPendingIntent
cho rõ ràng) khi gọi APIKotlin
// 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();
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()
vàonConsentRejectedOrCanceled()
được gọi nếu người dùng chấp nhận hoặc từ chối/huỷ bỏ sự đồng ý của bạn, tương ứng.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 thông 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 sẽ 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 một nút, nút bật/tắt hoặc một phần tử trực quan 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 tạm thời, 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 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 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 cho người dùng biế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, bao gồm cả lựa chọn huỷ liên kết các tài khoản đó. Chuyển họ đến trang quản lý Tài khoản Google được liên kết, tức là https://myaccount.google.com/accountlinking.