פלאגין של שירותי Google ל שירותי Gradle

מבוא

כחלק מהפעלת ממשקי ה-API של Google או שירותי 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 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/created/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/created/res/google-services/{scent}/{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 חדש.