هنگام راه‌اندازی دستگاه جدید، اعتبار برنامه را بازیابی کنید

ویژگی بازیابی اعتبارنامه مدیر اعتبار به کاربران این امکان را می دهد که هنگام راه اندازی یک دستگاه جدید، حساب های برنامه خود را بازیابی کنند. این API در پیش‌نمایش برنامه‌نویس است و در همه دستگاه‌هایی که دارای Android 9 یا بالاتر و خدمات Google Play (GMS) Core نسخه 242200000 یا بالاتر هستند در دسترس است. مزایای ویژگی Restore Credentials عبارتند از:

  • تجربه کاربری یکپارچه : کاربران می توانند حساب برنامه خود را بدون نیاز به ورود دستی به هر برنامه جداگانه بازیابی کنند.
  • افزایش تعامل کاربر : اگر کاربران بتوانند هنگام راه‌اندازی دستگاه جدید حساب خود را بازیابی کنند، احتمالاً به استفاده از برنامه شما ادامه خواهند داد.
  • کاهش تلاش برای توسعه : ویژگی Restore Credentials با Credential Manager یکپارچه شده است، بنابراین توسعه دهندگانی که قبلاً از کلیدهای عبور پشتیبانی می کنند می توانند قابلیت های بازیابی اعتبار را اضافه کنند.

چگونه کار می کند

می توانید از Restore Credentials برای ایجاد، دریافت و پاک کردن اعتبارنامه های مربوطه استفاده کنید.

  1. ایجاد اعتبار بازیابی : هنگامی که کاربر به برنامه شما وارد می شود، یک اعتبار بازیابی مرتبط با حساب او ایجاد کنید. اگر کاربر پشتیبان‌گیری Google را فعال کرده باشد، این اعتبار به صورت محلی ذخیره می‌شود و با ابر همگام‌سازی می‌شود و رمزگذاری سرتاسر در دسترس است (برنامه‌ها می‌توانند از همگام‌سازی با ابر انصراف دهند)
  2. دریافت بازیابی اعتبار : وقتی کاربر دستگاه جدیدی را راه‌اندازی می‌کند، برنامه شما می‌تواند از مدیر اعتبارنامه بازیابی اعتبارنامه را درخواست کند. این به شما امکان می دهد کاربر را به طور خودکار بدون نیاز به ورودی اضافی وارد سیستم کنید.
  3. پاک کردن اعتبار بازیابی : وقتی کاربر از برنامه شما خارج شد، باید اعتبار بازیابی مرتبط را حذف کنید.

ویژگی Restore Credentials می تواند به راحتی با سیستم های Backend که قبلاً کلیدهای عبور را پیاده سازی کرده اند، یکپارچه شود. این سازگاری از این واقعیت ناشی می شود که هم کلیدهای عبور و هم کلیدهای بازیابی (نوع اعتبار مورد استفاده در ویژگی Restore Credentials) از مشخصات فنی زیرین یکسانی پیروی می کنند. این تراز اطمینان می دهد که فرآیند بازیابی اعتبارنامه ها می تواند به طور موثر اعتبار کاربری ذخیره شده در سیستم های دارای کلید عبور را بازیابی و بازیابی کند و تجربه ای سازگار و کاربرپسند را در پلتفرم های مختلف و روش های احراز هویت ارائه دهد.

برگه پایینی مدیر اعتبارنامه
شکل 1. نموداری که بازیابی داده های یک برنامه را به دستگاه جدید با استفاده از یک اعتبار بازیابی، از جمله ایجاد اعتبار، شروع جریان بازیابی و ورود خودکار کاربر نشان می دهد.

پیاده سازی

Restore Credentials API از طریق کتابخانه Credential Manager Jetpack در دسترس است. برای شروع، مراحل زیر را دنبال کنید:

  1. وابستگی Credential Manager را به پروژه خود اضافه کنید.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-alpha03")
    
  2. یک شی CreateRestoreCredentialRequest ایجاد کنید.

  3. متد createCredential() را در شی CredentialManager فراخوانی کنید.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(context, createRestoreRequest)
    

    این اعتبار بازیابی ایجاد شده یک نوع اعتبار webauthn است و به عنوان کلید بازیابی شناخته می شود.

  4. هنگامی که کاربر یک دستگاه جدید را راه اندازی می کند، متد getCredential() را در شی CredentialManager فراخوانی کنید.

    // Fetch the Authentication JSON from server
    val authenticationJson = fetchAuthenticationJson()
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(listOf(options))
    
    // The restore key can be fetched in two scenarios to
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    
  5. هنگامی که کاربر از برنامه شما خارج شد، متد clearCredentialState() را در شی CredentialManager فراخوانی کنید.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(TYPE_CLEAR_RESTORE_CREDENTIAL)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

اگر از یک عامل پشتیبان استفاده می کنید، قسمت getCredential در پاسخ به تماس onRestore انجام دهید. این اطمینان حاصل می کند که اعتبار برنامه بلافاصله پس از بازیابی اطلاعات برنامه بازیابی می شود.

سوالات متداول

Q1. تفاوت بین کلید بازیابی و رمز عبور چیست؟

یک کلید بازیابی مانند کلید عبور عمل می کند اما به طور خاص برای بازیابی حساب در دستگاه های جدید طراحی شده است. هنگامی که از یک مدیر رمز عبور مانند Google Password Manager برای احراز هویت استفاده می کنید، کلیدهای عبور و رمزهای عبور قابل استفاده شما نمایش داده می شود، در حالی که کلید بازیابی نمایش داده نمی شود، زیرا برای ورود به سیستم معمولی در نظر گرفته نشده است.

Q2. آیا کلید بازیابی اعتبار یک بار مصرف است؟

نه، کلید بازیابی اعتبار یک بار مصرف نیست. Credential Manager بدون وضعیت است و از فعالیت کاربر بی اطلاع است، بنابراین نمی تواند به طور خودکار کلید را پس از استفاده حذف کند.

کلیدهای بازیابی فقط در شرایط زیر حذف می شوند:

  • اقدامات در سطح سیستم : کاربران برنامه را حذف نصب می کنند یا داده های آن را پاک می کنند.
  • تماس‌های سطح برنامه : هنگام کنترل خروج کاربر در کد برنامه خود، با فراخوانی CredentialManager#clearCredentialState() کلید را به صورت برنامه‌نویسی حذف می‌کنید.

Q3. آیا ویژگی Restore Credentials فقط برای یک دستگاه جدید کار می کند؟

بله، این ویژگی برای راه اندازی اولیه یک دستگاه جدید مجهز به اندروید طراحی شده است، زیرا مستقیماً با عملکرد پشتیبان گیری و بازیابی سیستم مرتبط است.

Q4. آیا می‌توانم از Restore Credentials برای ورود بی‌صدا کاربر به هر دستگاهی که همان حساب Google وارد شده است استفاده کنم؟

خیر، ویژگی Restore Credentials برای استفاده برای ورود به سیستم عمومی در دستگاه‌ها در نظر گرفته نشده است. این فقط در یک سناریوی خاص کار می کند: زمانی که کاربر در حال راه اندازی یک دستگاه جدید با بازیابی یک نسخه پشتیبان از دستگاه قدیمی خود است. برای موفقیت این فرآیند بازیابی یکباره، هر دو دستگاه باید به یک حساب Google مرتبط باشند.

Q5. سازمان من یک برنامه اصلی و چندین برنامه فرعی دارد. آیا می توان کار کلید را برای همه این برنامه ها بازیابی کرد؟

خیر. یک کلید بازیابی به نام بسته منحصر به فرد یک برنامه مرتبط است. از آنجایی که برنامه اصلی شما و هر برنامه فرعی نام بسته متفاوتی دارند، باید یک کلید بازیابی جداگانه برای هر برنامه ایجاد کنید.

Q6. آیا برای ایجاد یک کلید بازیابی برای حساب کاربری یک کلید عبور لازم است؟

خیر، رمز عبور لازم نیست. توانایی ایجاد کلید بازیابی مستقل از روش ورود کاربر است. هدف آن ذخیره وضعیت احراز هویت فعلی کاربر است. تا زمانی که کاربر به طور فعال به برنامه شما وارد شده است، می توانید یک کلید بازیابی برای او ایجاد کنید.

Q7. آیا کاربر می تواند کلید بازیابی را حذف کند؟

خیر، کاربر کنترل مستقیمی روی کلید بازیابی ندارد. منطق برنامه مسئول مدیریت کلیدهای بازیابی است.

برای امنیت، توصیه می کنیم هر زمان که کاربر از سیستم خارج شد، برنامه به طور خودکار کلید را حذف کند. این اطمینان حاصل می کند که دفعه بعد که برنامه را در همان دستگاه باز می کنند، به درستی از سیستم خارج شده اند و از آنها خواسته می شود دوباره وارد سیستم شوند.

Q8. آیا می توانم از Restore Credentials بدون تنظیم allowBackup روی true در مانیفست خود استفاده کنم؟

بله، ویژگی Restore Credentials بدون در نظر گرفتن اینکه allowBackup روی true تنظیم شده باشد یا خیر کار می کند.

Q9. بازیابی اعتبارنامه ها برای کاربرانی که چندین حساب وارد شده در یک برنامه دارند چگونه کار می کند؟

ویژگی Restore Credentials طوری طراحی شده است که در هر زمان تنها با یک حساب کار کند.