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

المقدّمة

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

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

يتضمّن المكوّن الإضافي 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/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 جديد.