المكوّن الإضافي في "خدمات Google" لأداة Gradle وملف إعداد JSON

كجزء من إضافة Firebase إلى مشروع Android، عليك إضافة المكوّن الإضافي google-services Gradle وملف إعداد google-services.json إلى مشروعك.

إذا أضفت Firebase إلى مشروع Android باستخدام وحدة تحكّم Firebase أو Management REST API أو واجهة سطر أوامر Firebase، عليك إضافة المكوّن الإضافي Gradle وملف إعداد JSON يدويًا إلى مشروعك. ومع ذلك، إذا كنت تستخدم Firebase Assistant for Android Studio، يتم تنفيذ هذه المهام تلقائيًا نيابةً عنك أثناء الإعداد.

إضافة مكوّن Gradle الإضافي

يمكنك إضافة المكوّن الإضافي Gradle لخدمات Google‏ (google-services) إلى ملف build.gradle:

dependencies {
    classpath 'com.google.gms:google-services:4.5.0'
    // ...
}

يؤدي المكوّن الإضافي Gradle لخدمات Google وظيفتَين رئيسيتَين:

  • يعالج ملف الإعداد google-services.json وينشئ موارد Android التي يمكن استخدامها في الرمز البرمجي لتطبيقك.

  • تضيف هذه الخطوة تبعيات للمكتبات الأساسية المطلوبة للخدمات التي فعّلتها. تتطلّب هذه الخطوة تطبيق المكوّن الإضافي Gradle لخدمات Google في ملف app/build.gradle، على النحو التالي:
    apply plugin: 'com.google.gms.google-services'

    يمكنك الاطّلاع على نتيجة هذه الخطوة من خلال تشغيل ./gradlew :app:dependencies.

إضافة ملف إعداد JSON

يتم وضع ملف الإعداد google-services.json بشكل عام في دليل app/ (في جذر وحدة تطبيق "استوديو Android"). اعتبارًا من الإصدار 2.2.0، يتيح المكوّن الإضافي استخدام ملفات JSON الخاصة بنوع الإصدار وصيغة المنتج. جميع هياكل الدليل التالية صالحة:

// dogfood and release are build types.
app/
    google-services.json
    src/dogfood/google-services.json
    src/release/google-services.json
    ...

عند استخدام نكهات المنتج، تكون هياكل الدليل الأكثر تعقيدًا هذه صالحة أيضًا.

// free and paid are product flavors.
app/
    google-services.json
    src/dogfood/paid/google-services.json
    src/release/free/google-services.json
    ...

كيفية معالجة ملف الإعداد بتنسيق JSON

يحتوي ملف الإعداد google-services.json على البنية الأساسية التالية:

{
  "project_info": {...},
  "client": [...],
}

يحتوي العنصر project_info على معلومات عامة عن مشروعك، بينما يحتوي كل عضو في مصفوفة client على معلومات عن العملاء (تطبيقات Android) التي أضفتها إلى المشروع.

عند معالجة ملف JSON لتطبيق Android، يستخدم المكوّن الإضافي فقط كائن client الذي يتطابق مع اسم الحزمة (لنوع الإصدار الحالي) استنادًا إلى المنطق التالي:

  • بالنسبة إلى كل عنصر في مصفوفة client، يتحقّق المكوّن الإضافي من قيمة client_info/android_client_info/package_name. إذا تطابق اسم الحزمة مع هذه القيمة، فسيتم عرض كائن العضو.

  • إذا لم يتطابق أي من أعضاء client مع اسم الحزمة، سيُظهر المكوّن الإضافي استثناءً.

يستخدم الجزء المتبقي من هذا المستند YOUR_CLIENT للإشارة إلى عضو مصفوفة client الذي يحدده المنطق الموضّح أعلاه.

إنشاء ملفات XML

النتيجة الرئيسية لمعالجة JSON هي إنتاج ملفي XML يمكنك الإشارة إليهما كموارد Android في التعليمات البرمجية الخاصة بك. فيما يلي أمثلة على كل ملف:

  • app/build/generated/res/google-services/{build_type}/values/values.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <! -- Present in all applications -->
        <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>
    
        <! -- Present in applications with the appropriate services configured -->
        <string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
        <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
        <string name="ga_trackingId" translatable="false">UA-65557217-3</string>
        <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
        <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
        <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
        <string name="project_id" translatable="false">mydemoapp</string>
    
    </resources>
    
  • app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="ga_trackingId" translatable="false">UA-65557218-3</string>
    </resources>
    

القيم في ملفات XML

تتوفّر كل قيمة في ملفات XML في ملف إعداد google-services.json في المواقع المدرَجة أدناه. إذا كان مشروع Android يتضمّن بعض الإعدادات التي تمنعك من استخدام المكوّن الإضافي google-services Gradle، يمكنك إعادة إنشاء ملفات XML يدويًا بأمان باستخدام هذه القيم.

  • google_app_id

    YOUR_CLIENT/client_info/mobilesdk_app_id
    
  • gcm_defaultSenderId

    project_info/project_number
    
  • default_web_client_id

    YOUR_CLIENT/oauth_client/client_id (client_type == 3)
    
  • ga_trackingId

    YOUR_CLIENT/services/analytics-service/analytics_property/tracking_id
    
  • firebase_database_url

    project_info/firebase_url
    
  • google_api_key

    YOUR_CLIENT/api_key/current_key
    
  • google_crash_reporting_api_key

    YOUR_CLIENT/api_key/current_key
    
  • project_id

    project_info/project_id
    

تحديد المشاكل وحلّها

عند إنشاء التطبيق، تظهر لي رسالة الخطأ التالية: File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it.

ستساعدك وحدة تحكّم Firebase في تنزيل ملف إعداد google-services.json.

بعد تنزيل ملف الإعداد google-services.json، انسخه إلى مجلد app/ في مشروعك على "استوديو Android"، أو إلى مجلد app/src/{build_type} إذا كنت تستخدم أنواع إصدارات متعددة.

لا يمكنني العثور على الرموز مثل R.string.gcm_defaultSenderId أو R.xml.global_tracker.

تأكَّد من أنّ اسم الحزمة في ملف build.gradle يتطابق مع اسم الحزمة الذي أدخلته عند إنشاء ملف google-services.json. إذا لم تكن متأكدًا، يمكنك تنفيذ خطوات البدء مرة أخرى والحصول على ملف JSON جديد.