מבוא
כחלק מהפעלת Google APIs או שירותי Firebase באפליקציית Android, יכול להיות שתצטרכו להוסיף את הפלאגין google-services
לקובץ build.gradle
:
dependencies {
classpath 'com.google.gms:google-services:4.4.3'
// ...
}
לתוסף google-services
יש שתי פונקציות עיקריות:
- מעבדים את קובץ
google-services.json
ומפיקים משאבי Android שאפשר להשתמש בהם בקוד של האפליקציה. לקבלת מידע נוסף, אפשר לעיין במאמר בנושא הוספת קובץ JSON. מוסיפים תלות בספריות בסיסיות שנדרשות לשירותים שהפעלתם. בשלב הזה צריך להחיל את הפלאגין 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 ספציפיים לסוג הבנייה ולטעם המוצר. מבני הספריות הבאים הם תקינים:
// 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 Services לא יכול לפעול בלי זה".
תשובה: מסוף 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 חדש.