این صفحه نحوه استفاده از فراخوانی دستگاه را برای ذخیره و بازیابی دادههای سفارشی با دستگاههای خاص شرح میدهد. میتوانید دادههای سفارشی را بعداً وقتی برنامهتان در همان دستگاه نصب شد، حتی بعداز بازنشانی دستگاه، با اطمینان دوباره فراخوانی کنید. این به شما امکان میدهد دستگاهی را که براساس کنش یا رفتاری که مشخص میکنید دوباره استفاده میشود شناسایی کنید و از آن جلوگیری کنید، درحالیکه حریم خصوصی کاربر حفظ میشود.
بهیادآوری دستگاه چگونه کار میکند؟
«بهخاطرآوری دستگاه» به برنامهها امکان میدهد دادههای سفارشی منسوب به دستگاهی خاص را بهگونهای ذخیره و فراخوانی کنند که حریم خصوصی کاربر حفظ شود. دادهها در سرورهای Google ذخیره میشود و این موضوع باعث میشود برنامهتان با اطمینان دادههای سفارشی شما را فراخوانی کند، حتی بعداز اینکه برنامهتان بازنصب میشود یا دستگاه بازنشانی میشود. برای مثال، میتوانید از این ویژگی برای بهخاطر آوردن دستگاههایی استفاده کنید که در آنها شواهدی از سوءاستفاده شدید پیدا کردهاید، دستگاههایی که قبلاً موارد باارزش (مانند دوره آزمایشی رایگان) را پسخرید کردهاند، یا دستگاههایی که بهطور مکرر برای ایجاد حسابهای جدید با اهداف سوءاستفادهگرانه استفاده میشوند. «بهخاطرآوری دستگاه» حریم خصوصی کاربر را حفظ میکند زیرا برنامه درخواستکننده فقط میتواند دادههای محدودی را که با دستگاهها مرتبط کرده است فراخوانی کند و به هیچ شناسه دستگاه یا کاربری دسترسی ندارد. پساز روشن کردن فراخوانی دستگاه، میتوانید کارهای زیر را انجام دهید:
- خواندن دادههای هر دستگاه: وقتی حکم یکپارچگی را دریافت میکنید، میتوانید سه مقدار سفارشی یا بیت را برای هر دستگاه بخوانید. میتوانید معنی خودتان را برای این مقادیر تعریف کنید؛ برای مثال، میتوانید این مقادیر را بهعنوان سه پرچم جداگانه درنظر بگیرید یا میتوانید آنها را ترکیب کنید تا هشت برچسب سفارشی را نشان دهند.
- اصلاح دادههای هر دستگاه: پساز دریافت کردن یک نمانه یکپارچگی، میتوانید از آن نمانه برای برقراری تماس سمت سرور با سرور Google Play برای اصلاح یک یا چند مقدار استفاده کنید. تا ۱۴ روز فرصت دارید از این کد استفاده کنید. این کار به شما امکان میدهد مقداری را اصلاح کنید، مثلاً اگر سوءاستفاده فقط در دوره دوهفتهای پساز اولینباری که بررسی یکپارچگی را انجام میدهید آشکار شود. وقتی مقداری را اصلاح میکنید، ماه و سالی که اصلاح انجام شده است نیز ذخیره میشود.
پیشنیازها و ملاحظات بهیادآوری دستگاه
از «فراخوانی دستگاه» فقط میتوان برای ذخیره و فراخوانی اطلاعات برای محافظت از امنیت برنامه و کاهش سوءاستفاده، کلاهبرداری، و دسترسی غیرمجاز استفاده کرد. نمیتوانید از بهخاطرآوری دستگاه برای اثر انگشت یا ردیابی کاربران یا دستگاههای خاص استفاده کنید و نمیتوانید از بهخاطرآوری دستگاه برای ردیابی ویژگیهای حساس کاربر یا دستگاه مثل جنسیت، سن، یا دادههای مکان استفاده کنید.
«بهخاطرآوری دستگاه» پیشنیازهای زیر را دارد:
- از «فراخوانی دستگاه» میتوان در تلفن، رایانه لوحی، دستگاه تاشو، تلویزیون، Auto، و Wear OS استفاده کرد. در Wear، فراخوانی دستگاه فقط در دستگاههایی دردسترس است که با Wear OS 5 یا بالاتر عرضه میشوند. فراخوانی دستگاه در شبیهسازها پشتیبانی نمیشود.
- برای فراخوانی دستگاه، باید نسخههای اخیر «فروشگاه Google Play» و «خدمات Google Play» در دستگاه نصب و فعال شده باشد.
- برای فراخوانی دستگاه، حساب کاربر باید دارای پروانه Play باشد، درغیراینصورت رأی ارزیابی نخواهد شد.
«بهیادآوری دستگاه» ملاحظات زمانی زیر را دارد:
- پساز درستیسنجی کردن یک نمانه یکپارچگی، تا ۱۴ روز فرصت دارید از آن برای ذخیره کردن دادههای سفارشی بهخاطرآوری دستگاه استفاده کنید.
- فراخوانی دستگاه شامل مُهرهای زمان است تا بتوانید دادههای اخیراً اصلاحشده را نسبت به دادههایی که مدتها پیش اصلاح شدهاند دارای اولویت بالاتری درنظر بگیرید. درنظر داشته باشید که پساز گذشت مدتزمان کافی، دادهها را نادیده بگیرید یا بازنشانی کنید تا این احتمال را درنظر بگیرید که ممکن است دستگاهها دستبهدست شوند یا بازسازی و دوباره فروخته شوند.
- بیتهای فراخوانی دستگاه بهمدت ۳ سال پساز آخرین دسترسی خواندن یا نوشتن ذخیره خواهد شد.
- اگر لازم است همه دادههای مرتبط با دستگاهی را حذف کنید، برنامهتان میتواند هر سه مقدار را در آن دستگاه به false بازنشانی کند. با این کار، مُهرهای زمان بهطور خودکار بازنشانی میشود.
برای توسعهدهندگانی که چند برنامه دارند و توسعهدهندگانی که برنامهها را منتقل میکنند، فراخوانی دستگاه بهصورت زیر عمل میکند:
- همه برنامههای موجود در حساب توسعهدهنده Google Play شما به سه مقدار یکسان در هر دستگاه دسترسی دارند. بهعبارت دیگر، اگر یکی از برنامههایتان یکی از مقادیر را اصلاح کند، همه برنامههایتان وقتی در همان دستگاه نصب شوند، مقدار اصلاحشده را میخوانند.
- اگر برنامهای از یک حساب توسعهدهنده به حساب توسعهدهنده دیگری منتقل شود، فراخوانی دستگاه دادههای هر دستگاه حساب توسعهدهنده جدید را منعکس خواهد کرد، نه دادههای هر دستگاه حساب توسعهدهنده قدیمی را.
روشن کردن بهیادآوری دستگاه
وقتی آماده بودید، فراخوانی دستگاه را در «کنسول Play» روشن کنید:
- به سیستم «کنسول Play» وارد شوید.
- برنامهای را که از یادآوری دستگاه استفاده خواهد کرد انتخاب کنید.
- از منوِ سمت راست، به محافظتشده با Play بروید.
- در کنار Play Integrity API، روی مدیریت کلیک کنید.
- در بخش «پاسخها» در صفحه، روی تغییر پاسخها کلیک کنید.
- «بهیادآوری دستگاه» را روشن کنید.
- روی «ذخیره تغییرات» کلیک کنید.
وقتی فراخوانی دستگاه را روشن یا خاموش میکنید، هرگونه پاسخ آزمایشی Play Integrity API که در «کنسول Play» راهاندازی کردهاید حذف خواهد شد و باید آنها را دوباره ایجاد کنید.
خواندن مقادیر بهخاطرآوری دستگاه
بهخاطرآوری دستگاه هم در درخواستهای کلاسیک و هم در درخواستهای استاندارد Play Integrity API کار میکند. در درخواستهای استاندارد، بهیادآوری دستگاه در تماس گرم کردن بازآوری میشود. بهعبارت دیگر، پساز اصلاح دادههای هر دستگاه، باید آمادهسازی دیگری انجام دهید تا مقدار بهروزشده را ببینید. پساز فعال شدن بهخاطرآوری دستگاه، میتوانید مقادیر بهخاطرآوری دستگاه را در حکمهای تمامیت خود بخوانید.
اصلاح مقادیر بهخاطرآوری دستگاه
میتوانید مقادیر بهخاطرآوری دستگاه را با برقراری تماس API سروربهسرور
مشابه رمزگشایی حکم
یکپارچگی تغییر دهید. تنظیم
یک بیت روی true تاریخ نوشتن آن را نیز بهروز میکند (حتی اگر ازقبل true بوده باشد).
تنظیم یک بیت روی false تاریخ نوشتن آن را به خالی بازنشانی میکند. هر بیتی که در درخواست مشخص نشده باشد بدون تغییر باقی میماند. تأخیر انتشار کوچکی بین نوشتن بیتها و امکان خواندن مجدد آنها در حکم وجود دارد. این
تأخیر میتواند تا ۳۰ ثانیه باشد، هرچند معمولاً بسیار کوتاهتر است. درخواستهای
نوشتن فراخوانی دستگاه باید کمتر از درخواستهای کد یکپارچگی باشد. این درخواستها جزو سهمیه درخواست کد اصالت شما محاسبه نمیشوند اما مشمول محدودیتهای نرخ جداگانهای هستند.
playintegrity.googleapis.com/v1/PACKAGE_NAME/deviceRecall:write -d \
'{
"integrityToken": "INTEGRITY_TOKEN",
"newValues": {
"bitFirst": true,
"bitThird": false
}
}'newValues.BitFirst = true // ForceSendFields optional for value true newValues.BitSecond = false // ForceSendFields required for value false newValues.BitThird = nil // do not set ForceSendFields for unspecified bits newValues.ForceSendFields = []string{"BitSecond"}