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:
- 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.
- Người dùng chọn Tài khoản Google cần 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ẽ 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.
- 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.
- 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:
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 Install Packages (Cài đặt gói).
Định cấu hình ứng dụng
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ầnbuildscript
vàallprojects
.buildscript { repositories { google() } } allprojects { repositories { google() } }
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' }
Thêm tính năng hỗ trợ cho Đường liên kết từ nền tảng của bạn
Đườ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.
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ọiKotlin
// 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()
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.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.