وقتی کاربری گذرکلید ایجاد میکند، سرور طرف متکی برخی جزئیات را ذخیره میکند، درحالیکه ارائهدهنده اطلاعات کاربری، مانند «مدیر گذرواژه Google»، جزئیات دیگری را ذخیره میکند. بهطور دقیق:
- سرور طرف متکی اعتبارنامه کلید عمومی را ذخیره میکند.
- ارائهدهنده اطلاعات کاربری نام کاربری، نام نمایشی، کلید خصوصی، و دیگر فرادادههای مرتبط را ذخیره میکند. این فراداده به کاربران کمک میکند گذرکلید موردنیاز را درطول ورود به سیستم شناسایی و انتخاب کنند.
ناهماهنگیهای احتمالی بین دادههای ذخیرهشده در سرور طرف اتکاکننده و ارائهدهنده اطلاعات کاربری میتواند به تجربه کاربری بد منجر شود. ممکن است در سناریوهای زیر مشکلاتی پیش بیاید:
- اعتبارنامه در سرور طرف متکی حذف شده است اما در ارائهدهنده اعتبارنامه حذف نشده است، که باعث میشود ارائهدهنده اعتبارنامه اعتبارنامه حذفشده را به کاربر نشان دهد.
- نام کاربری یا نام نمایشی در سرور طرف معتمد بهروز شده است اما در ارائهدهنده اطلاعات اعتباری بهروز نشده است، که باعث میشود ارائهدهنده اطلاعات اعتباری جزئیات قدیمی را نشان دهد.
Signal API در Credential Manager به طرفهای متکی اجازه میدهد با ارائهدهندگان اطلاعات کاربری ارتباط برقرار کنند تا اطلاعات کاربری را حذف کنند و فرادادههای کاربر (مثل نام کاربری و نام نمایشی) را بهروز کنند. سه نوع درخواست پشتیبانیشده برای سناریوهای مختلف وجود دارد:
SignalUnknownCredentialRequest- نشان میدهد که اعتبارنامه خاصی دیگر معتبر نیست و باید از ارائهدهنده اعتبارنامه پنهان یا برداشته شود.
SignalAllAcceptedCredentialIdsRequest- فهرستی از شناسههای اعتبارنامه پذیرفتهشده را به ارائهدهنده اعتبارنامه ارائه میدهد.
SignalCurrentUserDetailsRequest- جزئیات فراداده کاربر را بهروز میکند.
سازگاری نسخه
Signal API در دستگاههای دارای Android 15 یا بالاتر دردسترس است و از نسخه 1.6.0-beta03 کتابخانه androidx.credentials دردسترس است.
پیادهسازی
برای استفاده از Signal API، این مراحل را دنبال کنید:
وابستگی Credential Manager را به پروژهتان اضافه کنید.
کاتلین
dependencies { implementation("androidx.credentials:credentials:1.7.0-alpha03") }
شیار
dependencies { implementation "androidx.credentials:credentials:1.7.0-alpha03" }
فراخوانی Signal API
برای ارسال درخواست سیگنال به ارائهدهنده اطلاعات کاربری، از درخواست سیگنال پشتیبانیشده استفاده کنید. هریک از انواع درخواست سیگنال به درخواست JSON نیاز دارد، همانطور که در مثالهای زیر نشان داده شده است:
اطلاعات کاربری نامشخص (
SignalUnknownCredentialRequest)از
SignalUnknownCredentialRequestبرای نشان دادن اینکه اعتبارنامه رد شده است و ناشناخته تلقی میشود استفاده کنید. وقتی ارائهدهنده اطلاعات کاربری این سیگنال را دریافت میکند، اطلاعات کاربری را پنهان یا حذف میکند.استفاده
وقتی طرف متکی نمیتواند ادعای گذرکلید را تأیید کند، از این سیگنال استفاده کنید. این نشان میدهد که گذرکلید نامعتبر است و باید توسط ارائهدهنده اطلاعات کاربری پنهان یا برداشته شود.
پارامترهای JSON لازم برای این درخواست
rpIdوcredentialIdهستند. برای اطلاعات بیشتر درباره ساختار JSON، گزینههای signalUnknownCredential را ببینید.credentialManager.signalCredentialState( SignalUnknownCredentialRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("credentialId", credentialId /* [String] Credential ID of the credential to be hidden or deleted */) }.toString() ) )همه مدارک پذیرفتهشده (
SignalAllAcceptedCredentialIdsRequest)از
SignalAllAcceptedCredentialIdsRequestبرای مطلع کردن ارائهدهندگان اطلاعات کاربری با مجموعه همه اطلاعات کاربری پذیرفتهشده استفاده کنید. وقتی ارائهدهنده اطلاعات اعتباری سیگنال را دریافت میکند، ارائهدهنده اطلاعات اعتباری هرگونه اطلاعات اعتباری را که در این فهرست گنجانده نشده است پنهان یا حذف میکند، یا هرگونه اطلاعات اعتباری را که قبلاً پنهان شده است و اکنون در فهرست گنجانده شده است آشکار میکند.استفاده
وقتی درستیسنجی گذرکلید توسط طرف معتمد ناموفق بود، از این سیگنال استفاده کنید. این خطا به این معنی است که گذرکلید نامعتبر است و باید توسط ارائهدهنده اطلاعات کاربری پنهان یا برداشته شود. هرزمان لازم باشد مجموعه شناسههای اعتبارنامه شناختهشده را به ارائهدهندگان اعتبارنامه همهفرستی کنید، میتوانید از این سیگنال استفاده کنید.
پارامترهای JSON لازم برای این درخواست عبارتند از
rpId،userId، وallAcceptedCredentialIds. برای اطلاعات بیشتر درباره ساختار JSON، گزینههای signalAllAcceptedCredential را ببینید.credentialManager.signalCredentialState( SignalAllAcceptedCredentialIdsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put( "allAcceptedCredentialIds", JSONArray(credentialIdsList /* [List<String>] List of accepted Credential IDs */) ) }.toString() ) )جزئیات کاربر فعلی (
SignalCurrentUserDetailsRequest)از
SignalCurrentUserDetailsRequestبرای مطلع کردن ارائهدهندگان اطلاعات کاربری استفاده کنید که فراداده، مانند نام کاربری و نام نمایشی برای کاربر موردنظر، بهروز شده است و باید در ارائهدهنده اطلاعات کاربری نشان داده شود.استفاده
وقتی کاربر یا طرف متکی فراداده گذرکلید منسوب به حساب کاربری را بهروز میکند، از این سیگنال استفاده کنید.
پارامترهای JSON لازم برای این درخواست عبارتاند از
rpId،userId،name، وdisplayName. برای اطلاعات بیشتر درباره ساختار JSON، گزینههای signalCurrentUserDetails را ببینید.credentialManager.signalCredentialState( SignalCurrentUserDetailsRequest( requestJson = JSONObject().apply { put("rpId", rpId /* [String] RP ID of the relying party */) put("userId", userId /* [String] User ID of the current user */) put("name", name /* [String] New Name to be updated for the current user */) put("displayName", displayName /* [String] New display name to be updated for the current user */) }.toString() ) )
آزمایش پیادهسازی
برای آزمایش پیادهسازی Signal API، مراحل زیر را تکمیل کنید:
نمونه ارائهدهنده اطلاعات اعتباری با نام MyVault را نصب کنید.
MyVault را بهعنوان ارائهدهنده اطلاعات کاربری در تنظیمات > گذرواژهها، گذرکلیدها و حسابها > سرویس ترجیحی فعال کنید.
همه اعلانهای MyVault را در تنظیمات > برنامهها > MyVault > اعلانها فعال کنید.
مطمئن شوید که نمایش در صفحه برای اعلانها در تنظیمات > برنامهها > MyVault > اعلانها > دستهها > کانال اعلان Signal API روشن باشد.
در برنامهتان، جریانهایی را که درخواستهای سیگنال را به ارائهدهنده اطلاعات کاربری ارسال میکنند راهاندازی کنید. باید اعلانهای MyVault را در صفحه ببینید. این کار تأیید میکند که ارائهدهنده اطلاعات کاربری درخواستها را دریافت کرده است.