پیوند حساب می تواند مستقیماً در برنامه تلفن همراه شما انجام شود و به کاربران شما امکان می دهد حساب خود را در سرویس شما با حساب Google خود پیوند دهند. پیوند ایجاد شده به Google اجازه دسترسی به دادههایی را میدهد که کاربر رضایت دارد به اشتراک بگذارد.
این رویکرد با درگیر کردن کاربران در زمینه آشنای برنامه شما به جای مکالمه دستیار، عملکرد پیوند حساب را بهبود می بخشد. میتوان آن را با ورود کاربر، تنظیمات، و سایر سطوح برنامه ادغام کرد و فرصتهایی را برای کشف و مشارکت Google Assistant Action شما ایجاد کرد. به عنوان مثال، پس از پیوند، می توانید پیشنهاد دهید که کاربر را مستقیماً به Action خود ببرید.
مزایا برای کاربران عبارتند از:
- کاربران میتوانند فرآیند پیوند حساب را در برنامه شما، محیطی که قبلاً با آن آشنا هستند، شروع و تکمیل کنند.
- کاربران به اعتبارنامه ورود نیاز ندارند زیرا قبلاً در دستگاه و برنامه تلفن همراه شما تأیید شده اند.
مزایای توسعه دهندگان عبارتند از:
- محل تبلیغ و شروع پیوند حساب در برنامه تلفن همراه خود را کنترل کنید، به عنوان مثال، در تنظیمات کاربر، در موارد بینابینی یا پس از ورود کاربر به برنامه تلفن همراه شما. افزودن چندین نقطه ورودی برای شروع پیوند حساب کمک می کند تا پیوند حساب قابل شناسایی تر شود و در نتیجه تعامل و تعداد حساب های مرتبط افزایش یابد.
- افزایش نرخ تبدیل زیرا کاربران میتوانند فرآیند پیوند را در مراحل کمتری نسبت به جریان استاندارد OAuth مبتنی بر وب تکمیل کنند.
- برای پیادهسازی پیوند از پلتفرم شما (اندروید) به تلاش مهندسی کم نیاز است زیرا این جریان از اجرای OAuth2.0 موجود شما استفاده میکند، با فرض اینکه قبلاً یکی را پیادهسازی کردهاید.
- کاهش نرخ رها کردن به این دلیل که کاربران نیازی به وارد کردن مجدد اعتبار ورود به سیستم خود ندارند و میتوانند این فرآیند را در مراحل کمتری تکمیل کنند. در جریان هایی که کاربران باید اعتبار ورود به سیستم خود را به خاطر بیاورند و وارد کنند، نرخ خروج می تواند تا 80٪ باشد.
چگونه کار میکند؟
پیوند از پلتفرم شما در مراحل زیر تکمیل میشود:
- کاربر روی یک تریگر لینک در اپلیکیشن موبایل شما کلیک میکند/آن را فعال/غیرفعال میکند.
- کاربر حساب گوگل را برای پیوند انتخاب میکند.
- کاربر یک حساب گوگل موجود در دستگاه را برای پیوند انتخاب میکند، یا با یک حساب جدید وارد سیستم میشود.
- به کاربر صفحههای رضایتنامهای که توسط گوگل میزبانی میشود نشان داده میشود و او باید با ادامه موافقت کند یا برای متوقف کردن فرآیند لینک دادن، آن را لغو کند.
- صفحه رضایت شما به کاربر نشان داده میشود و او باید با ادامه موافقت کند یا برای متوقف کردن فرآیند لینک دادن، آن را لغو کند.
- این پیوند بین حساب کاربری، در سرویس شما و حساب گوگل آنها برقرار میشود.

شکل 1. لینک از جریان پلتفرم شما
الزامات
برای پیادهسازی لینک از پلتفرم خود، به موارد زیر نیاز دارید:
- یک اپلیکیشن اندروید.
- مالکیت، مدیریت و نگهداری یک سرور OAuth 2.0 که از جریان کد مجوز OAuth 2.0 پشتیبانی میکند.
راهاندازی
قبل از ادامه مراحل زیر، باید مراحل ثبت نام پیوند حساب را تکمیل کرده باشید.
محیط توسعه خود را راهاندازی کنید
جدیدترین سرویسهای گوگل پلی را روی میزبان توسعه خود دریافت کنید:
- مدیر SDK اندروید را باز کنید.
در بخش ابزارهای SDK ، سرویسهای Google Play را پیدا کنید.
اگر وضعیت این بستهها «نصبشده» نیست، هر دو را انتخاب کرده و روی «نصب بستهها» کلیک کنید.
برنامه خود را پیکربندی کنید
در فایل
build.gradleدر سطح پروژه، مخزن Maven گوگل را هم در بخشهایbuildscriptو هم در بخشallprojectsوارد کنید.buildscript { repositories { google() } } allprojects { repositories { google() } }وابستگیهای API مربوط به «پیوند با گوگل» را به فایل gradle سطح برنامه ماژول خود که معمولاً
app/build.gradleاست، اضافه کنید:dependencies { implementation 'com.google.android.gms:play-services-auth:21.5.1' }
پشتیبانی از لینک را از پلتفرم خود اضافه کنید
لینک از جریان پلتفرم شما منجر به ذخیره یک توکن دسترسی، ارائه شده توسط سرویس شما، توسط گوگل میشود. قبل از بازگرداندن توکن برای کاربر، باید رضایت او دریافت شود.
برای دریافت رضایت کاربر و بازگرداندن توکن کد احراز هویت از طریق SDK سرویسهای گوگل پلی، مراحل زیر را دنبال کنید.
یک PendingIntent بسازید که بتواند فعالیت رضایت شما را اجرا کند - رضایت توسط API سرویسهای Play اجرا میشود. شما باید هنگام فراخوانی API، یک
PendingIntent(که برای وضوح بیشتر به آنconsentPendingIntentگفته میشود) ارائه دهید.کاتلین
// Build a PendingIntent that can launch the consent activity val consentPendingIntent = buildConsentPendingIntent()جاوا
// Build a PendingIntent that can launch your consent activity PendingIntent consentPendingIntent = buildConsentPendingIntent();ایجاد اکتیویتی مربوطه برای مدیریت رضایتنامه
کاتلین
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() }جاوا
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(); } }ما فرض میکنیم که متدهای
onConsentAccpeted()وonConsentRejectedOrCanceled()به ترتیب در صورتی فراخوانی میشوند که کاربر رضایت شما را بپذیرد یا رد/لغو کند.یک درخواست برای ذخیره توکن ایجاد کنید و در کنار سایر پارامترهای پیکربندی،
PendingIntentایجاد شده در مرحله 1 بالا را نیز ارسال کنید.کاتلین
// 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))جاوا
// 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)); ```
مراحل فوق از کاربر رضایت میخواهد و یک کد مجوز به گوگل برمیگرداند.
بهترین شیوهها
برنامه شما باید وضعیت لینک را از طریق یک دکمه، دکمه تغییر وضعیت یا یک عنصر بصری مشابه به کاربر نشان دهد.

شکل ۱. نمونه تصویر وضعیت لینک
شما باید پس از موفقیتآمیز بودن یک پیوند، به کاربر اطلاع دهید، مثلاً یک اعلان نمایش دهید، وضعیت را تغییر دهید یا کاربر را به یک صفحه موفقیت پیوند جداگانه هدایت کنید.
شما باید کاربران درون برنامهای را تشویق کنید تا حسابهای کاربری خود را لینک کنند، در حالت ایدهآل، این کار باید بر اساس سیگنالهای قوی باشد که لینک کردن حسابها برای چنین کاربرانی مفید خواهد بود.
پس از اتصال موفقیتآمیز، باید به کاربران مثالی از نحوهی کار با حساب کاربری متصلشده ارائه دهید، مثلاً اگر به تازگی یک سرویس پخش موسیقی را متصل کردهاید، از دستیار گوگل خود بخواهید موسیقی پخش کند.
به کاربران این امکان را بدهید که حسابهای کاربری لینکشدهی خود را مدیریت کنند، از جمله گزینهی لغو اتصال آنها. آنها را به صفحهی مدیریت حسابهای کاربری لینکشدهی گوگلشان، یعنی https://myaccount.google.com/accountlinking، هدایت کنید.