این صفحه نحوه استفاده از قابلیت فراخوانی دستگاه برای ذخیره و بازیابی دادههای سفارشی با دستگاههای خاص را شرح میدهد. شما میتوانید بعداً وقتی برنامه شما روی همان دستگاه نصب شد، حتی پس از تنظیم مجدد دستگاه، دادههای سفارشی را با اطمینان دوباره فراخوانی کنید. این به شما امکان میدهد تا بر اساس یک اقدام یا رفتاری که مشخص میکنید، ضمن حفظ حریم خصوصی کاربر، استفاده مجدد از دستگاه را شناسایی و از آن جلوگیری کنید.
فراخوان دستگاه چگونه کار میکند؟
قابلیت فراخوانی دستگاه به برنامهها این امکان را میدهد که دادههای سفارشی مرتبط با یک دستگاه خاص را به گونهای ذخیره و فراخوانی کنند که حریم خصوصی کاربر حفظ شود. این دادهها در سرورهای گوگل ذخیره میشوند و به برنامه شما اجازه میدهند تا حتی پس از نصب مجدد برنامه یا تنظیم مجدد دستگاه، دادههای سفارشی شما را به طور قابل اعتمادی فراخوانی کند. به عنوان مثال، میتوانید از این ویژگی برای فراخوانی دستگاههایی که شواهدی از سوءاستفاده شدید در آنها پیدا کردهاید، دستگاههایی که قبلاً اقلام با ارزش بالا (مانند یک دوره آزمایشی رایگان) را بازخرید کردهاند، یا دستگاههایی که بارها برای ایجاد حسابهای جدید برای اهداف سوءاستفاده استفاده میشوند، استفاده کنید. فراخوانی دستگاه، حریم خصوصی کاربر را حفظ میکند زیرا برنامه درخواستکننده فقط میتواند دادههای محدودی را که با دستگاهها مرتبط کرده است، بدون دسترسی به هیچ دستگاه یا شناسه کاربر، فراخوانی کند. پس از روشن کردن فراخوانی دستگاه، میتوانید موارد زیر را انجام دهید:
- خواندن دادههای هر دستگاه : میتوانید هنگام دریافت حکم یکپارچگی، سه مقدار یا بیت سفارشی برای هر دستگاه بخوانید. میتوانید معنای خودتان را برای این مقادیر تعریف کنید؛ برای مثال، میتوانید با این مقادیر به عنوان سه پرچم جداگانه رفتار کنید یا میتوانید آنها را برای نمایش هشت برچسب سفارشی ترکیب کنید.
- تغییر دادههای هر دستگاه : پس از دریافت توکن یکپارچگی، میتوانید از آن توکن برای برقراری ارتباط سمت سرور با سرور گوگل پلی و تغییر یک یا چند مقدار استفاده کنید. شما تا ۱۴ روز فرصت دارید از این توکن استفاده کنید. این به شما امکان میدهد در صورتی که، برای مثال، سوءاستفاده فقط در دوره دو هفتهای پس از اولین انجام بررسی یکپارچگی آشکار شود، یک مقدار را تغییر دهید. هنگام تغییر یک مقدار، ماه و سالی که تغییر انجام شده است نیز ذخیره میشود.
پیشنیازها و ملاحظات فراخوان دستگاه
فراخوان دستگاه فقط میتواند برای ذخیره و فراخوانی اطلاعات جهت محافظت از امنیت برنامه و کاهش سوءاستفاده، کلاهبرداری و دسترسی غیرمجاز استفاده شود. شما نمیتوانید از فراخوان دستگاه برای اثر انگشت یا ردیابی کاربران یا دستگاههای شخصی استفاده کنید و نمیتوانید از فراخوان دستگاه برای پیگیری ویژگیهای حساس کاربر یا دستگاه مانند جنسیت، سن یا دادههای مکانی استفاده کنید.
فراخوان دستگاه پیش نیازهای زیر را دارد:
- فراخوان دستگاه را میتوان در تلفنها، تبلتها، دستگاههای تاشو، تلویزیون، خودرو و Wear OS استفاده کرد. در Wear، فراخوان دستگاه فقط در دستگاههایی که با Wear OS 5 یا بالاتر عرضه میشوند، در دسترس است. فراخوان دستگاه در شبیهسازها پشتیبانی نمیشود.
- فراخوان دستگاه مستلزم نصب و فعالسازی نسخههای جدید فروشگاه گوگل پلی و سرویسهای گوگل پلی روی دستگاه است.
- فراخوان دستگاه مستلزم آن است که حساب کاربری دارای مجوز Play باشد، در غیر این صورت حکم صادره بیاعتبار خواهد بود.
فراخوان دستگاه ملاحظات زمانی زیر را دارد:
- پس از تأیید توکن یکپارچگی، تا ۱۴ روز فرصت دارید تا از آن برای ذخیره دادههای فراخوان دستگاه سفارشی استفاده کنید.
- فراخوان دستگاه شامل مهرهای زمانی است تا بتوانید دادههای اخیراً اصلاحشده را نسبت به دادههایی که مدتها پیش اصلاح شدهاند، اولویت بالاتری در نظر بگیرید. نادیده گرفتن یا تنظیم مجدد دادهها را پس از یک دوره زمانی طولانی در نظر بگیرید تا در نظر بگیرید که دستگاهها میتوانند دست به دست شوند یا بازسازی و دوباره فروخته شوند.
- بیتهای فراخوانی برای یک دستگاه به مدت ۳ سال پس از آخرین دسترسی خواندن یا نوشتن ذخیره میشوند.
- اگر نیاز به حذف تمام دادههای مرتبط با یک دستگاه داشته باشید، برنامه شما میتواند هر سه مقدار موجود در آن دستگاه را به false تنظیم مجدد کند. این کار به طور خودکار مهرهای زمانی را بازنشانی میکند.
برای توسعهدهندگانی که چندین برنامه دارند و توسعهدهندگانی که برنامهها را منتقل میکنند، فراخوان دستگاه به شرح زیر عمل میکند:
- تمام برنامههای موجود در حساب توسعهدهنده گوگل پلی شما به سه مقدار یکسان در هر دستگاه دسترسی دارند. به عبارت دیگر، اگر یکی از برنامههای شما یکی از مقادیر را تغییر دهد، تمام برنامههای شما هنگام نصب در همان دستگاه، مقدار تغییر یافته را خواهند خواند.
- اگر برنامهای از یک حساب توسعهدهنده به حساب توسعهدهنده دیگر منتقل شود، فراخوانی دستگاه، دادههای مربوط به هر دستگاه حساب توسعهدهنده جدید را منعکس میکند، نه دادههای مربوط به هر دستگاه حساب توسعهدهنده قدیمی را.
فعال کردن فراخوانی دستگاه
وقتی آماده بودید، قابلیت بازیابی دستگاه را در کنسول Play فعال کنید:
- وارد کنسول Play شوید.
- برنامهای را انتخاب کنید که از فراخوانی دستگاه استفاده میکند.
- از منوی سمت چپ به گزینهی «محافظتشده با پخش» بروید.
- در کنار Play Integrity API، روی مدیریت کلیک کنید.
- در بخش پاسخها در صفحه، روی تغییر پاسخها کلیک کنید.
- بازیابی دستگاه را روشن کنید.
- روی ذخیره تغییرات کلیک کنید.
وقتی فراخوانی دستگاه را فعال یا غیرفعال میکنید، هرگونه پاسخ تست Play Integrity API که در کنسول Play تنظیم کردهاید حذف میشود و باید دوباره آنها را ایجاد کنید.
خواندن مقادیر فراخوانی دستگاه
فراخوانی دستگاه هم در درخواستهای کلاسیک و هم در درخواستهای استاندارد Play Integrity API کار میکند. در درخواستهای استاندارد، فراخوانی دستگاه در فراخوانی warmup بهروزرسانی میشود. به عبارت دیگر، پس از تغییر دادههای هر دستگاه، برای مشاهده مقدار بهروزرسانیشده، باید warmup دیگری انجام دهید. پس از فعال شدن فراخوانی دستگاه، میتوانید مقادیر فراخوانی دستگاه را در احکام integrity خود بخوانید .
مقادیر فراخوانی دستگاه را تغییر دهید
شما میتوانید مقادیر فراخوانی دستگاه را با انجام یک فراخوانی API سرور به سرور، مشابه رمزگشایی حکم یکپارچگی، تغییر دهید. تنظیم یک بیت به مقدار true تاریخ نوشتن آن را نیز بهروزرسانی میکند (حتی اگر از قبل true بوده باشد). تنظیم یک بیت به مقدار false ، تاریخ نوشتن آن را به حالت خالی بازنشانی میکند. هر بیتی که در یک درخواست مشخص نشده باشد، بدون تغییر باقی میماند. بین نوشتن بیتها و امکان خواندن مجدد آنها در حکم، یک تأخیر انتشار کوچک وجود دارد. این تأخیر میتواند تا 30 ثانیه باشد، اگرچه عموماً بسیار کوتاهتر است. درخواستهای نوشتن فراخوانی دستگاه باید کمتر از درخواستهای توکن یکپارچگی شما باشند. آنها در سهمیه درخواست توکن یکپارچگی شما محاسبه نمیشوند، اما مشمول محدودیتهای نرخ دفاعی غیرعمومی هستند.
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"}