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

المقدمة

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

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

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

  1. يمكنك معالجة ملف google-services.json وإنتاج موارد Android يمكن استخدامها في رمز تطبيقك. اطّلِع على مزيد من المعلومات عن إضافة ملف JSON.
  2. يمكنك إضافة تبعيات للمكتبات الأساسية المطلوبة للخدمات التي فعَّلتها. تتطلب هذه الخطوة تطبيق المكوّن الإضافي Google Services Gradle في ملف 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/generate/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/generate/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 Studio أو إلى مجلد app/src/{build_type} إذا كنت تستخدم أنواع إصدار متعدّدة.

س: لا يمكنني العثور على الرمز "R.string.gcm_defaultsenderId" و"R.xml.global_tracker" وما إلى ذلك.

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