پلاگین خدمات Google Gradle

مقدمه

به عنوان بخشی از فعال‌سازی APIهای گوگل یا سرویس‌های Firebase در برنامه اندروید خود، ممکن است لازم باشد افزونه google-services را به فایل build.gradle خود اضافه کنید:

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

افزونه‌ی google-services دو عملکرد اصلی دارد:

  1. فایل google-services.json را پردازش کرده و منابع اندرویدی تولید می‌کند که می‌توانند در کد برنامه شما استفاده شوند. برای اطلاعات بیشتر به بخش افزودن فایل JSON مراجعه کنید.
  2. Add dependencies for basic libraries required for the services you have enabled. This step requires that you apply the Google Services Gradle plugin in your app/build.gradle file, like so:
    apply plugin: 'com.google.gms.google-services'

    می‌توانید نتیجه‌ی این مرحله را با اجرای ./gradlew :app:dependencies مشاهده کنید.

اضافه کردن فایل JSON

فایل google-services.json معمولاً در پوشه app/ (در ریشه ماژول برنامه اندروید استودیو) قرار دارد. از نسخه 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 در دایرکتوری release به شما امکان می‌دهد تا یک پروژه 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

The google-services.json file has the following basic structure:

{
  "project_info": {...},
  "client": [...],
}

شیء project_info شامل اطلاعات کلی در مورد پروژه شما است، در حالی که هر عضو از آرایه client شامل اطلاعاتی در مورد کلاینت‌ها (برنامه‌های اندروید) است که به پروژه اضافه کرده‌اید.

هنگام پردازش فایل JSON برای برنامه اندروید شما، افزونه فقط از شیء client استفاده می‌کند که با نام بسته شما (برای نوع ساخت فعلی) بر اساس منطق زیر مطابقت دارد:

  • برای هر عضو آرایه client :
    • مقدار client_info/android_client_info/package_name را بررسی کنید.
    • اگر نام بسته با این مقدار مطابقت داشت، شیء عضو را برمی‌گرداند.
  • اگر هیچ یک از اعضای client با نام بسته مطابقت نداشته باشند، یک استثنا ایجاد می‌شود.

For the rest of this document we will use {YOUR_CLIENT} to refer to the member of the client array determined by the procedure above.

نتیجه اصلی پردازش JSON تولید دو فایل XML است که می‌توانید به عنوان منابع اندروید در کد جاوا خود به آنها ارجاع دهید. در زیر مثالی از هر فایل آورده شده است:

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>

Every value in the XML files is present in the google-services.json file at the locations below. If your Android project has some configuration that prevents you from using the google-services plugin, you can safely recreate the XML files manually using these values:

شناسه برنامه گوگل :

{YOUR_CLIENT}/client_info/mobilesdk_app_id

gcm_defaultSenderId :

project_info/project_number

شناسه پیش‌فرض_وب_کلاینت :

{YOUR_CLIENT}/oauth_client/client_id (client_type == 3)

شناسه ردیابی ga :

{YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id

آدرس اینترنتی پایگاه داده فایربیس :

project_info/firebase_url

کلید google_api :

{YOUR_CLIENT}/api_key/current_key

google_crash_reporting_api_key :

{YOUR_CLIENT}/api_key/current_key

شناسه_پروژه :

project_info/project_id

عیب‌یابی

س: هنگام ساخت، پیام خطای زیر را دریافت می‌کنم: «فایل google-services.json از پوشه ریشه ماژول وجود ندارد. افزونه سرویس‌های گوگل بدون آن نمی‌تواند کار کند».

A: The Firebase console will help you download the google-services.json . In addition, the Quickstart guides for most APIs have instructions for generating this file. Once you have downloaded the google-services.json file, copy it into the app/ folder of your Android Studio project, or into the app/src/{build_type} folder if you are using multiple build types.

س: نمی‌توانم نماد "R.string.gcm_defaultSenderId"، "R.xml.global_tracker" و غیره را پیدا کنم.

الف) مطمئن شوید که نام بسته در فایل build.gradle شما با نام بسته‌ای که هنگام ایجاد فایل google-services.json وارد کرده‌اید، مطابقت دارد. اگر مطمئن نیستید، دوباره مراحل شروع را طی کنید و یک فایل json جدید دریافت کنید.