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

مقدمة

كجزء من تفعيل Google APIs أو خدمات Firebase في تطبيق Android، قد يكون عليك إضافة المكوّن الإضافي google-services إلى ملف build.gradle:

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

يؤدي المكوّن الإضافي google-services إلى وظيفتَين أساسيتَين:

  1. معالجة ملف google-services.json وإنتاج موارد Android يمكن استخدامها في الرمز البرمجي لتطبيقك. راجِع معلومات إضافية حول إضافة ملف JSON.
  2. أضِف العناصر التابعة للمكتبات الأساسية المطلوبة للخدمات التي فعّلتها. تتطلّب هذه الخطوة تطبيق المكوّن الإضافي لنظام 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
    ...

ملاحظة: يتيح لك توفير ملف google-services.json في دليل الإصدار الاحتفاظ بمشروع Firebase منفصل لملفات APK الخاصة بالإنتاج.

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

// 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 المحدّد من خلال الإجراء أعلاه.

والنتيجة الرئيسية لمعالجة JSON هي إنتاج ملفي XML يمكنك الرجوع إليهما كموارد Android في رمز Java. فيما يلي مثال على كل ملف:

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 في ملف google-services.json في المواقع الجغرافية أدناه. إذا كان مشروعك على Android يتضمن بعض الإعدادات التي تمنعك من استخدام المكوّن الإضافي google-services، يمكنك إعادة إنشاء ملفات 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

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

س: عند إنشاء الإصدار، تظهر لي رسالة الخطأ التالية: "ملف google-services.json غير متوفّر في المجلد الجذر للوحدة. لا يمكن أن يعمل مكوّن خدمات Google الإضافي بدونه".

ج: ستساعدك وحدة تحكُّم 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 جديد.