حماية موارد الخلفية المخصّصة باستخدام ميزة "فحص التطبيقات" على Android

يمكنك استخدام App Check لحماية موارد الخلفية المخصّصة غير التابعة لـ Google في تطبيقك، مثل الخلفية المستضافة ذاتيًا. لإجراء ذلك، عليك تنفيذ كلا الإجراءَين التاليَين:

قبل البدء

أضِف App Check إلى تطبيقك باستخدام إما موفّر Play Integrity التلقائي أو موفّر مخصّص .

إرسال الرموز المميّزة App Check مع طلبات الخلفية

لضمان تضمين طلبات الخلفية رمزًا مميّزًا صالحًا وغير منتهي الصلاحية من خدمة App Check، عليك تضمين كل طلب في استدعاء للدالة getAppCheckToken(). ستعيد مكتبة App Check إنشاء الرمز المميّز إذا لزم الأمر، ويمكنك الوصول إليه في مستمع النجاح للطريقة.

بعد الحصول على رمز مميّز صالح، أرسِله مع الطلب إلى الخلفية. يعود إليك تحديد الطريقة التي تريد استخدامها، ولكن لا تُرسِل App Check الرموز المميّزة كجزء من عناوين URL، بما في ذلك في مَعلمات طلب البحث، لأنّ ذلك يعرّضها لخطر التسريب والاعتراض غير المقصودَين. النهج المقترَح هو إرسال الرمز المميّز في عنوان HTTP مخصّص.

على سبيل المثال، إذا كنت تستخدم Retrofit:

Kotlin

class ApiWithAppCheckExample {
    interface YourExampleBackendService {
        @GET("yourExampleEndpoint")
        fun exampleData(
            @Header("X-Firebase-AppCheck") appCheckToken: String,
        ): Call<List<String>>
    }

    var yourExampleBackendService: YourExampleBackendService = Retrofit.Builder()
        .baseUrl("https://yourbackend.example.com/")
        .build()
        .create(YourExampleBackendService::class.java)

    fun callApiExample() {
        Firebase.appCheck.getAppCheckToken(false).addOnSuccessListener { appCheckToken ->
            val token = appCheckToken.token
            val apiCall = yourExampleBackendService.exampleData(token)
            // ...
        }
    }
}

Java

public class ApiWithAppCheckExample {
    private interface YourExampleBackendService {
        @GET("yourExampleEndpoint")
        Call<List<String>> exampleData(
                @Header("X-Firebase-AppCheck") String appCheckToken);
    }

    YourExampleBackendService yourExampleBackendService = new Retrofit.Builder()
            .baseUrl("https://yourbackend.example.com/")
            .build()
            .create(YourExampleBackendService.class);

    public void callApiExample() {
        FirebaseAppCheck.getInstance()
                .getAppCheckToken(false)
                .addOnSuccessListener(new OnSuccessListener<AppCheckToken>() {
                    @Override
                    public void onSuccess(@NonNull AppCheckToken appCheckToken) {
                        String token = appCheckToken.getToken();
                        Call<List<String>> apiCall =
                                yourExampleBackendService.exampleData(token);
                        // ...
                    }
                });
    }
}

ميزة الحماية من إعادة التشغيل (إصدار تجريبي)

عند إرسال طلب إلى نقطة نهاية فعّلت فيها ميزة الحماية من إعادة التشغيل، عليك تضمين الطلب في استدعاء للدالة getLimitedUseAppCheckToken() بدلاً من getAppCheckToken():

Kotlin

Firebase.appCheck.limitedUseAppCheckToken.addOnSuccessListener {
    // ...
}

Java

FirebaseAppCheck.getInstance()
        .getLimitedUseAppCheckToken().addOnSuccessListener(
                new OnSuccessListener<AppCheckToken>() {
                    @Override
                    public void onSuccess(AppCheckToken appCheckToken) {
                        String token = appCheckToken.getToken();
                        // ...
                    }
                }
        );