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