הפלאגין של 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/ (ברמה הבסיסית (root) של מודול האפליקציה 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
    ...

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

  • לכל איבר במערך 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. בנוסף, המדריכים למתחילים של רוב ממשקי ה-API כוללים הוראות ליצירת הקובץ הזה. אחרי שמורידים את הקובץ 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 חדש.