قم بحماية بيانات الاعتماد السحابية لتطبيق Firebase ML Android

إذا كان تطبيق Android الخاص بك يستخدم إحدى واجهات برمجة التطبيقات السحابية الخاصة بـ Firebase ML، فيجب عليك اتخاذ بعض الخطوات الإضافية قبل تشغيل تطبيقك في مرحلة الإنتاج لمنع الوصول غير المصرح به إلى واجهة برمجة التطبيقات.

بالنسبة لتطبيقات الإنتاج الخاصة بك، ستضمن أن العملاء المعتمدين فقط هم من يمكنهم الوصول إلى الخدمات السحابية. (لاحظ أن الأجهزة التي لا تحتوي على جذر هي فقط التي يمكنها المصادقة باستخدام الطريقة الموضحة.)

بعد ذلك، ستقوم بإنشاء مفتاح API لتصحيح الأخطاء فقط والذي يمكنك استخدامه للراحة أثناء الاختبار والتطوير.

1. سجل تطبيقات الإنتاج الخاصة بك مع Firebase

أولاً، قم بتسجيل تطبيقات الإنتاج الخاصة بك مع Firebase.

  1. تأكد من حصولك على توقيعات SHA-1 لتطبيقك. ارجع إلى مصادقة عميلك لمعرفة كيفية القيام بذلك.

  2. انتقل إلى إعدادات المشروع في وحدة تحكم Firebase، ثم حدد علامة التبويب الإعدادات .

  3. قم بالتمرير لأسفل إلى بطاقة تطبيقاتك ، ثم حدد تطبيق Android الخاص بك.

  4. أضف توقيع SHA-1 الخاص بتطبيقك إلى معلومات تطبيقك.

2. قم بتقييد نطاق مفاتيح API الخاصة بك

بعد ذلك، قم بتكوين مفاتيح API الموجودة لديك لعدم السماح بالوصول إلى Cloud Vision API:

  1. افتح صفحة بيانات الاعتماد الخاصة بوحدة تحكم Google Cloud. عندما يُطلب منك ذلك، حدد مشروعك.

  2. بالنسبة لكل مفتاح API موجود في القائمة، افتح طريقة عرض التحرير.

  3. في قسم قيود واجهة برمجة التطبيقات (API) ، حدد تقييد المفتاح ، ثم أضف إلى القائمة جميع واجهات برمجة التطبيقات (APIs) التي تريد أن يتمكن مفتاح واجهة برمجة التطبيقات (API) من الوصول إليها. تأكد من عدم تضمين Cloud Vision API.

    عندما تقوم بتكوين قيود واجهة برمجة التطبيقات (API) لمفتاح واجهة برمجة التطبيقات (API)، فإنك تعلن بوضوح عن واجهات برمجة التطبيقات (APIs) التي يمكن للمفتاح الوصول إليها. افتراضيًا، عندما يتم تحديد مفتاح عدم تقييد في قسم قيود واجهة برمجة التطبيقات ، يمكن استخدام مفتاح واجهة برمجة التطبيقات للوصول إلى أي واجهة برمجة تطبيقات ممكّنة للمشروع.

الآن، لن تمنح مفاتيح واجهة برمجة التطبيقات (API) الموجودة لديك حق الوصول إلى خدمات ML السحابية، ولكن سيستمر كل مفتاح في العمل مع أي واجهات برمجة تطبيقات قمت بإضافتها إلى قائمة قيود واجهة برمجة التطبيقات (API) الخاصة به.

لاحظ أنه إذا قمت بتمكين أي واجهات برمجة تطبيقات إضافية في المستقبل، فيجب عليك إضافتها إلى قائمة قيود واجهة برمجة التطبيقات لمفتاح واجهة برمجة التطبيقات القابل للتطبيق.

3. قم بإنشاء واستخدام مفتاح API لتصحيح الأخطاء فقط

وأخيرًا، قم بإنشاء مفتاح API جديد لاستخدامه في التطوير فقط. يمكن لـ Firebase ML استخدام مفتاح واجهة برمجة التطبيقات هذا للوصول إلى خدمات Google Cloud في البيئات التي لا تكون فيها مصادقة التطبيق ممكنة، كما هو الحال عند التشغيل على المحاكيات.

  1. قم بإنشاء مفتاح API جديد لاستخدامه في التطوير:

    1. افتح صفحة بيانات الاعتماد الخاصة بوحدة تحكم Google Cloud. عندما يُطلب منك ذلك، حدد مشروعك.

    2. انقر فوق إنشاء بيانات اعتماد > مفتاح واجهة برمجة التطبيقات (API) ولاحظ مفتاح واجهة برمجة التطبيقات (API) الجديد. يسمح هذا المفتاح بالوصول إلى واجهة برمجة التطبيقات (API) من التطبيقات التي لم تتم مصادقتها، لذا حافظ على سرية هذا المفتاح .

  2. لضمان عدم تسرب مفتاح debug API الجديد مع تطبيقك الذي تم إصداره، حدد مفتاح debug API في ملف بيان Android المستخدم فقط لإصدارات تصحيح الأخطاء:

    1. إذا لم يكن لديك بيان تصحيح بالفعل، فقم بإنشاء واحد بالنقر فوق ملف > جديد > آخر > ملف بيان Android وتحديد debug من مجموعات المصدر الهدف.

    2. في بيان التصحيح، أضف التصريح التالي:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. في تطبيقك، قم بتكوين Firebase ML لاستخدام مطابقة بصمة الشهادة لمصادقة عميلك في الإنتاج واستخدام مفاتيح API - مفتاح التصحيح - فقط في إصدارات تصحيح الأخطاء:

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

الخطوات التالية

راجع قائمة التحقق من الإطلاق للحصول على معلومات حول إعداد تطبيقك للتشغيل عند استخدام ميزات Firebase الأخرى.