این صفحه نحوه رسیدگی به مسائل مربوط به احکام صداقت را شرح می دهد.
هنگامی که یک توکن یکپارچگی درخواست می شود، می توانید یک گفتگوی Google Play را برای کاربر نمایش دهید. وقتی یک یا چند مشکل در حکم یکپارچگی وجود دارد، میتوانید گفتگو را نمایش دهید. گفتگو در بالای برنامه شما نمایش داده می شود و از کاربران می خواهد که علت مشکل را حل کنند. پس از بسته شدن گفتگو، می توانید تأیید کنید که مشکل با یک درخواست دیگر به Integrity API برطرف شده است.
دیالوگ های یکپارچگی
GET_LICENSED (نوع کد 1)
موضوع حکم
وقتی appLicensingVerdict == "UNLICENSED"
. این بدان معنی است که حساب کاربری بدون مجوز است. به عبارت دیگر، آنها برنامه را از Google Play نصب یا خریداری نکردند.
اصلاح
میتوانید گفتگوی GET_LICENSED
نشان دهید تا از کاربر بخواهید برنامه شما را از Google Play دریافت کند. اگر کاربر بپذیرد، حساب کاربری مجوز می گیرد ( appLicensingVerdict == "LICENSED"
). این برنامه به کتابخانه Google Play کاربر اضافه میشود و Google Play میتواند بهروزرسانیهای برنامه را از طرف شما ارائه دهد.
مثال UX
CLOSE_UNKNOWN_ACCESS_RISK (نوع کد 2)
موضوع حکم
وقتی environmentDetails.appAccessRiskVerdict.appsDetected
حاوی "UNKNOWN_CAPTURING"
یا "UNKNOWN_CONTROLLING"
باشد، به این معنی است که برنامههای ناشناختهای در دستگاه در حال اجرا هستند که میتوانند صفحه نمایش را بگیرند یا دستگاه را کنترل کنند.
اصلاح
میتوانید کادر گفتگوی CLOSE_UNKNOWN_ACCESS_RISK
را نشان دهید تا از کاربر بخواهد همه برنامههای ناشناختهای را که میتوانند صفحه نمایش را گرفته یا دستگاه را کنترل کنند، ببندد. اگر کاربر روی دکمه Close all
ضربه بزند، همه این برنامه ها بسته می شوند.
مثال UX
CLOSE_ALL_ACCESS_RISK (نوع کد 3)
موضوع حکم
وقتی environmentDetails.appAccessRiskVerdict.appsDetected
حاوی هر یک از "KNOWN_CAPTURING"
، "KNOWN_CONTROLLING"
، "UNKNOWN_CAPTURING"
یا "UNKNOWN_CONTROLLING"
، به این معنی است که برنامه هایی روی دستگاه در حال اجرا هستند که می توانند صفحه نمایش را کنترل کنند.
اصلاح
میتوانید کادر گفتگوی CLOSE_ALL_ACCESS_RISK
را نشان دهید تا از کاربر بخواهد همه برنامههایی را که میتوانند صفحه نمایش را ضبط کرده یا دستگاه را کنترل کنند، ببندد. اگر کاربر روی دکمه Close all
ضربه بزند، همه این برنامهها روی دستگاه بسته میشوند.
مثال UX
یک گفتگوی یکپارچگی را درخواست کنید
هنگامی که مشتری یک توکن یکپارچگی درخواست می کند، می توانید از روش ارائه شده در StandardIntegrityToken (API استاندارد) و IntegrityTokenResponse (API کلاسیک) استفاده کنید: showDialog(Activity activity, int integrityDialogTypeCode)
.
مراحل زیر نحوه استفاده از Play Integrity API را برای نمایش گفتگوی GET_LICENSED نشان می دهد:
یک توکن یکپارچگی از برنامه خود درخواست کنید و توکن را به سرور خود ارسال کنید. می توانید از درخواست استاندارد یا کلاسیک استفاده کنید.
کاتلین
// Request an integrity token val tokenResponse: StandardIntegrityToken = requestIntegrityToken() // Send token to app server and get response on what to do next val yourServerResponse: YourServerResponse = sendToServer(tokenResponse.token())
جاوا
// Request an integrity token StandardIntegrityToken tokenResponse = requestIntegrityToken(); // Send token to app server and get response on what to do next YourServerResponse yourServerResponse = sendToServer(tokenResponse.token());
در سرور خود، رمز یکپارچگی را رمزگشایی کنید و قسمت
appLicensingVerdict
را بررسی کنید. می تواند چیزی شبیه به این باشد:// Licensing issue { ... accountDetails: { appLicensingVerdict: "UNLICENSED" } }
اگر توکن حاوی
appLicensingVerdict: "UNLICENSED"
، به مشتری برنامه خود پاسخ دهید و از آن درخواست کنید گفتگوی مجوز را نشان دهد:کاتلین
private fun getDialogTypeCode(integrityToken: String): Int{ // Get licensing verdict from decrypted and verified integritytoken val licensingVerdict: String = getLicensingVerdictFromDecryptedToken(integrityToken) return if (licensingVerdict == "UNLICENSED") { 1 // GET_LICENSED } else 0 }
جاوا
private int getDialogTypeCode(String integrityToken) { // Get licensing verdict from decrypted and verified integrityToken String licensingVerdict = getLicensingVerdictFromDecryptedToken(integrityToken); if (licensingVerdict.equals("UNLICENSED")) { return 1; // GET_LICENSED } return 0; }
در برنامه خود، با
showDialog
با کد درخواستی بازیابی شده از سرور تماس بگیرید:کاتلین
// Show dialog as indicated by the server val showDialogType: Int? = yourServerResponse.integrityDialogTypeCode() if (showDialogType != null) { // Call showDialog with type code, the dialog will be shown on top of the // provided activity and complete when the dialog is closed. val integrityDialogResponseCode: Task<Int> = tokenResponse.showDialog(activity, showDialogType) // Handle response code, call the Integrity API again to confirm that // verdicts have been resolved. }
جاوا
// Show dialog as indicated by the server @Nullable Integer showDialogType = yourServerResponse.integrityDialogTypeCode(); if (showDialogType != null) { // Call showDialog with type code, the dialog will be shown on top of the // provided activity and complete when the dialog is closed. Task<Integer> integrityDialogResponseCode = tokenResponse.showDialog(activity, showDialogType); // Handle response code, call the Integrity API again to confirm that // verdicts have been resolved. }
گفتگو در بالای فعالیت ارائه شده نمایش داده می شود. هنگامی که کاربر گفتگو را بسته است، Task با یک کد پاسخ کامل می شود.
(اختیاری) برای نمایش هر دیالوگ بیشتر، توکن دیگری درخواست کنید. اگر درخواستهای استاندارد ارائه میکنید، باید دوباره ارائهدهنده توکن را گرم کنید تا یک حکم جدید دریافت کنید.