استفاده از App Check برای ایمن‌سازی SDK ناوبری برای اندروید

Firebase App Check با مسدود کردن ترافیکی که از منابعی غیر از برنامه‌های قانونی شما می‌آید، از تماس‌های برنامه شما به پلتفرم Google Maps محافظت می‌کند. این کار را با درخواست ارزیابی صحت برنامه یا دستگاه از یک ارائه‌دهنده گواهی مانند Play Integrity انجام می‌دهد. وقتی برنامه خود را با App Check ادغام می‌کنید، محافظت در برابر درخواست‌های مخرب و غیرمجاز را افزایش می‌دهید که به نوبه خود از صورتحساب شما در برابر هزینه‌های غیرمجاز محافظت می‌کند. App Check همچنین گزارش اختلال در زمان واقعی را در اکوسیستم برنامه ناوگان شما به طور قابل توجهی بهبود می‌بخشد و در نتیجه به نفع همه رانندگانی است که از برنامه شما استفاده می‌کنند. برای اطلاعات بیشتر، به گزارش اختلال مراجعه کنید.

چرا از بررسی برنامه استفاده کنیم؟

بررسی برنامه از دو بخش مجزا از کیت توسعه نرم‌افزار ناوبری برای اندروید محافظت می‌کند: عملکرد اصلی ناوبری و گزارش اختلال.

بررسی برنامه (App Check) به مسدود کردن درخواست‌های اندروید از منابع مخرب یا غیرمجاز در SDK اصلی ناوبری کمک می‌کند. این امر مستقیماً به نفع شما خواهد بود و پروژه شما را از تقلب در صورتحساب و اتمام سهمیه محافظت می‌کند.

گزارش اختلال

اگر اپلیکیشن شما از گزارش‌دهی اختلال و قابلیت‌های رأی‌گیری در لحظه پشتیبانی می‌کند، استفاده از App Check اکیداً توصیه می‌شود. فعال کردن App Check تضمین می‌کند که رانندگان شما دقیق‌ترین مسیرها را با در نظر گرفتن تمام بازخوردهای لحظه‌ای دریافت می‌کنند.

چرا بررسی برنامه برای گزارش‌دهی مهم است:

  • ضریب اطمینان بالا برای بسته شدن جاده‌ها: رویدادهای تأثیرگذار بر مسیر، مانند بسته شدن جاده‌ها، می‌توانند رفتار مسیریابی را برای همه رانندگان به طور قابل توجهی تغییر دهند. برای محافظت از نقشه در برابر خرابکاری‌های احتمالی، هرزنامه یا گزارش‌های نادرست، زیرساخت تعدیل گوگل برای اختلالات بسته شدن جاده‌ها به سیگنال‌های قوی یکپارچگی دستگاه و برنامه متکی است.
  • نحوه اعتبارسنجی گزارش‌ها توسط App Check: گزارش‌های کاربران و آرای ارسال‌شده از Navigation SDK برای اندروید شامل توکن App Check است که توسط بخش پشتیبانی گوگل برای اعتبارسنجی مشروعیت بازخورد، افزایش سطح اعتماد آن و امکان ارزیابی تأثیر آن بر نقشه زنده استفاده می‌شود.
  • تأثیر حذف App Check: گزارش‌هایی که بدون توکن معتبر App Check ارسال می‌شوند، تحت یک مدل با اعتماد کمتر ارزیابی می‌شوند و ممکن است صرفاً به عنوان سیگنال‌های خاموش پردازش شوند. این بدان معناست که اگرچه کاربران شما هنوز می‌توانند گزارش دهند و رأی دهند، اما گزارش‌های آنها کمتر روی نقشه قابل مشاهده است یا بر مسیرهای سایر رانندگان تأثیر می‌گذارد و نیاز به اعتبارسنجی اضافی دارد.

آیا اپ چک برای من مناسب است؟

در بیشتر موارد، App Check توصیه می‌شود؛ با این حال، در سناریوهای زیر نیازی به App Check نیست یا پشتیبانی نمی‌شود:

  • برنامه‌های خصوصی یا آزمایشی: اگر برنامه شما به صورت عمومی قابل دسترسی نیست، نیازی به بررسی برنامه نیست.
  • دستگاه‌های آسیب‌پذیر: ارائه‌دهندگان گواهی توصیه‌شده، از اجرای Navigation SDK برای اندروید روی دستگاه‌های غیرقابل اعتماد، مانند تلفن‌های روت‌شده یا جیلبریک‌شده، جلوگیری می‌کنند. برای پشتیبانی از این دستگاه‌ها، یک ارائه‌دهنده گواهی سفارشی مستقر کنید.
  • دستگاه‌های اندروید غیر GMS: دستگاه‌های اندروید برای برخورداری از یکپارچگی Play باید سرویس‌های موبایل گوگل (GMS) را اجرا کنند. اگر قصد دارید از دستگاه‌های اندروید غیر GMS پشتیبانی کنید، از یک ارائه‌دهنده گواهی سفارشی استفاده کنید.

مرور کلی مراحل اجرا

در سطح بالا، برای ادغام برنامه خود با App Check، این مراحل را دنبال خواهید کرد:

  1. فایربیس را به برنامه خود اضافه کنید.
  2. کتابخانه App Check را اضافه کنید و App Check را مقداردهی اولیه کنید.
  3. یک ارائه‌دهنده توکن اضافه کنید. این مرحله، ارائه‌دهنده گواهی مورد نظر شما را برای تأیید صحت دستگاه یا برنامه فراخوانی می‌کند.
  4. APIهای Navigation و App Check را مقداردهی اولیه کنید.
  5. فعال کردن اشکال‌زدایی. این قابلیت در طول توسعه یا در محیط‌های یکپارچه‌سازی مداوم (CI) مفید است.
  6. قبل از فعال کردن اجرای درخواست‌ها، درخواست‌های برنامه خود را رصد کنید. به این ترتیب، شما به طور یکپارچه و بدون ایجاد اختلال در کار کاربران خود، App Check را اجرا می‌کنید.

ملاحظات هنگام برنامه‌ریزی ادغام App Check

  • سهمیه‌های ارائه‌دهنده گواهی: ارائه‌دهنده گواهی که ما توصیه می‌کنیم، Play Integrity، محدودیت تماس روزانه برای سطح استفاده استاندارد API خود دارد. برای اطلاعات بیشتر در مورد محدودیت‌های تماس، به صفحه تنظیمات در مستندات توسعه‌دهنده Google Play Integrity مراجعه کنید.
  • تأخیر در شروع: در بیشتر مواقع، کاربران شما در طول استفاده منظم تأخیری را تجربه نخواهند کرد، زیرا توکن‌های App Check در دستگاه ذخیره می‌شوند. سیستم به طور خودکار توکن‌های App Check را قبل از انقضا در پس‌زمینه به‌روزرسانی می‌کند تا عملکرد یکپارچه حفظ شود. با این حال، اگر یک توکن App Check معتبر وجود نداشته باشد، کاربران برنامه شما در هنگام راه‌اندازی با تأخیر مواجه خواهند شد. به عنوان مثال، این تأخیر در هنگام شروع سرد، زمانی که یک توکن ذخیره شده منقضی شده یا از بین رفته است، رخ می‌دهد.
  • Token TTL: زمان حیات (TTL) مدت زمانی را که توکن App Check قبل از نیاز به به‌روزرسانی معتبر است، تعیین می‌کند. می‌توانید این مدت زمان را از 30 دقیقه تا 7 روز در کنسول Firebase پیکربندی کنید. مدت زمان 1 ساعت به عنوان یک پایه امن توصیه می‌شود، اما SDK به طور خودکار به‌روزرسانی‌های پس‌زمینه را تقریباً در نیمی از مدت زمان TTL انجام می‌دهد. برای دستورالعمل‌های گام به گام کنسول، به مستندات Firebase App Check مراجعه کنید.

برنامه خود را با App Check ادغام کنید

پیش‌نیازها و الزامات

  • برنامه‌ای که کیت توسعه نرم‌افزار ناوبری (Navigation SDK) برای اندروید نسخه ۷.۹ یا بالاتر روی آن نصب شده باشد.
  • اثر انگشت گواهی SHA-256 برنامه شما.
  • نام بسته برنامه شما.
  • شما باید مالک برنامه در کنسول Google Cloud باشید.
  • شناسه پروژه برنامه شما از کنسول Google Cloud.

مرحله ۱: اضافه کردن فایربیس به برنامه

برای افزودن Firebase به برنامه خود ، دستورالعمل‌های موجود در مستندات توسعه‌دهندگان Firebase را دنبال کنید. فایل google-services.json خود را به دایرکتوری سطح برنامه پروژه خود اضافه کنید.

مرحله ۲: کتابخانه App Check را اضافه کنید و App Check را مقداردهی اولیه کنید

وابستگی App Check را به فایل build.gradle برنامه خود اضافه کنید:

گرووی (build.gradle)

dependencies {
    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:34.17.0')
    // Add the dependency for the App Check library with Play Integrity
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

مقداردهی اولیه App Check در کلاس Application یا اکتیویتی اصلی:

جاوا

import com.google.firebase.FirebaseApp;
import com.google.firebase.appcheck.FirebaseAppCheck;
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;

// Initialize Firebase App
FirebaseApp.initializeApp(/* context= */ this);

// Initialize App Check
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance());

کاتلین

import com.google.firebase.Firebase
import com.google.firebase.appcheck.appCheck
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
import com.google.firebase.initialize

// Initialize Firebase App
Firebase.initialize(context = this)

// Initialize App Check
Firebase.appCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance(),
)

مرحله ۳: ارائه دهنده توکن را اضافه کنید

یک پیاده‌سازی از رابط MapsAppCheckTokenProvider ایجاد کنید. این ارائه‌دهنده به صورت ناهمگام توکن‌های App Check را از Firebase App Check دریافت کرده و آنها را با استفاده از MapsAppCheckTokenCallback به پشته شبکه Navigation SDK برای اندروید ارسال می‌کند:

جاوا

import com.google.android.gms.maps.MapsAppCheckTokenCallback;
import com.google.android.gms.maps.MapsAppCheckTokenProvider;
import com.google.firebase.appcheck.FirebaseAppCheck;

public class NavigationTokenProvider implements MapsAppCheckTokenProvider {
  @Override
  public void fetchToken(MapsAppCheckTokenCallback callback) {
    FirebaseAppCheck.getInstance()
        .getAppCheckToken(false) // forcingRefresh = false
        .addOnSuccessListener(
            tokenResult -> {
              String token = tokenResult.getToken();
              callback.onSuccess(token);
            })
        .addOnFailureListener(
            e -> {
              callback.onFailure();
            });
  }
}

کاتلین

import com.google.android.gms.maps.MapsAppCheckTokenCallback
import com.google.android.gms.maps.MapsAppCheckTokenProvider
import com.google.firebase.appcheck.FirebaseAppCheck

class NavigationTokenProvider : MapsAppCheckTokenProvider {
    override fun fetchToken(callback: MapsAppCheckTokenCallback) {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResult ->
                callback.onSuccess(tokenResult.token)
            }
            .addOnFailureListener {
                callback.onFailure()
            }
    }
}

مرحله ۴: مقداردهی اولیه APIهای ناوبری و بررسی برنامه

کیت توسعه نرم‌افزار ناوبری (Navigation SDK) را برای اندروید مقداردهی اولیه کنید و نمونه ارائه‌دهنده توکن یکپارچه خود را با استفاده از MapsApiSettings.setAppCheckTokenProvider() ثبت کنید:

جاوا

import com.google.android.gms.maps.MapsApiSettings;

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, new NavigationTokenProvider());

کاتلین

import com.google.android.gms.maps.MapsApiSettings

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, NavigationTokenProvider())

مرحله ۵: فعال کردن اشکال‌زدایی (اختیاری)

پس از اینکه App Check برای Navigation SDK برای اندروید اجباری شد، ویژگی‌های برنامه شما که به Navigation SDK برای اندروید وابسته هستند، در شبیه‌ساز یا از یک محیط ادغام مداوم (CI) اجرا نمی‌شوند، زیرا این محیط‌ها به عنوان دستگاه‌های معتبر واجد شرایط نیستند. برای اجرای برنامه خود در این محیط‌ها در طول توسعه و آزمایش، باید یک نسخه اشکال‌زدایی از برنامه خود ایجاد کنید که از ارائه‌دهنده اشکال‌زدایی App Check به جای ارائه‌دهنده گواهی تولید استفاده می‌کند.

  1. وابستگی debug provider را به فایل build.gradle برنامه خود اضافه کنید:

    گرووی (build.gradle)

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug'
    }
  2. پیکربندی App Check برای استفاده از debug provider factory در debug build های شما:

    جاوا

    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory;
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;
    
    if (BuildConfig.DEBUG) {
        firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance()
        );
    } else {
        firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance()
        );
    }

    کاتلین

    import com.google.firebase.Firebase
    import com.google.firebase.appcheck.appCheck
    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
    
    if (BuildConfig.DEBUG) {
        Firebase.appCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance(),
        )
    } else {
        Firebase.appCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance(),
        )
    }
  3. برنامه خود را روی یک شبیه‌ساز یا دستگاه اشکال‌زدایی اجرا کنید. App Check یک توکن اشکال‌زدایی محلی را در خروجی logcat شما چاپ می‌کند.
  4. این توکن اشکال‌زدایی را در کنسول Firebase کپی و ثبت کنید. برای جزئیات بیشتر، به مستندات ارائه‌دهنده اشکال‌زدایی Firebase App Check مراجعه کنید.

مرحله ۶: درخواست‌های برنامه خود را رصد کنید و در مورد اجرای آنها تصمیم بگیرید

قبل از فعال کردن اجرای قانون، درخواست‌های برنامه خود را رصد کنید تا مطمئن شوید که برای کاربران قانونی اختلال ایجاد نمی‌کنید.

  1. برای مشاهده درصد ترافیک تأیید شده در مقابل ترافیک تأیید نشده، به صفحه معیارهای App Check در کنسول Firebase مراجعه کنید.
  2. وقتی مطمئن شدید که بخش عمده‌ی ترافیک شما تأیید شده است و کاربران قانونی به نسخه‌ی جدیدی از برنامه‌ی شما که شامل پیاده‌سازی App Check شما است، به‌روزرسانی شده‌اند، اجرای قانون را فعال کنید.
  3. پس از فعال شدن اجرا، App Check تمام ترافیک بدون توکن معتبر App Check را رد می‌کند.