הפלאגין של שירותי Google ל-Gradle וקובץ ההגדרות בפורמט JSON

כחלק מהוספת Firebase לפרויקט Android, צריך להוסיף לפרויקט את הפלאגין של google-services Gradle ואת קובץ התצורה של google-services.json.

אם אתם מוסיפים את Firebase לפרויקט Android באמצעות מסוף Firebase, ממשק ה-API לניהול בארכיטקטורת REST או ה-CLI של Firebase, אתם צריכים להוסיף לפרויקט באופן ידני את הפלאגין של Gradle ואת קובץ התצורה בפורמט JSON. עם זאת, אם אתם משתמשים בFirebase Assistant for Android Studio, המשימות האלה מבוצעות באופן אוטומטי במהלך ההגדרה.

הוספת הפלאגין של Gradle

מוסיפים את הפלאגין של שירותי Google ל-Gradle‏ (google-services) לקובץ build.gradle:

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

לפלאגין של שירותי Google ל-Gradle יש שתי פונקציות עיקריות:

  • מעבד את קובץ התצורה של google-services.json ומפיק משאבי Android שאפשר להשתמש בהם בקוד של האפליקציה.

  • מוסיף תלויות לספריות בסיסיות שנדרשות לשירותים שהפעלתם. בשלב הזה צריך להחיל את הפלאגין של שירותי Google ל-Gradle בקובץ app/build.gradle, באופן הבא:
    apply plugin: 'com.google.gms.google-services'

    כדי לראות את התוצאה של השלב הזה, מריצים את הפקודה ./gradlew :app:dependencies.

הוספת קובץ התצורה בפורמט JSON

קובץ התצורה google-services.json נמצא בדרך כלל בספרייה app/ (בתיקיית השורש של מודול האפליקציה ב-Android Studio). החל מגרסה 2.2.0, הפלאגין תומך בקובצי JSON ספציפיים לסוג ה-build ולגרסת המוצר. כל מבני הספריות הבאים תקינים:

// 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 שתואם לשם החבילה (לסוג ה-build הנוכחי) על סמך הלוגיקה הבאה:

  • לכל איבר במערך 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 יש הגדרה שמונעת מכם להשתמש בפלאגין Gradle של 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
    

פתרון בעיות

במהלך הבנייה, מופיעה הודעת השגיאה הבאה: 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 Studio, או לתיקייה app/src/{build_type} אם משתמשים בכמה סוגים של build.

אני לא מוצא/ת את הסמלים כמו R.string.gcm_defaultSenderId או R.xml.global_tracker.

חשוב לוודא ששם החבילה בקובץ build.gradle זהה לשם החבילה שהזנתם כשיצרתם את הקובץ google-services.json. אם אתם לא בטוחים, הפעילו שוב את תהליך תחילת העבודה וקבלו קובץ JSON חדש.