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

مقدمه

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

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

افزونه 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 نوع ساخت و طعم محصول پشتیبانی می کند. تمام ساختارهای دایرکتوری زیر معتبر هستند:

// 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 حاوی اطلاعاتی در مورد کلاینت ها (برنامه های اندروید) است که به پروژه اضافه کرده اید.

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

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

برای بقیه این سند، از {YOUR_CLIENT} برای ارجاع به عضوی از آرایه client که طبق روال بالا تعیین شده است، استفاده خواهیم کرد.

نتیجه اصلی پردازش 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 در فایل 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 از پوشه ریشه ماژول وجود ندارد. افزونه خدمات گوگل بدون آن کار نمی کند".

پاسخ: کنسول Firebase به شما کمک می کند google-services.json را دانلود کنید. علاوه بر این، راهنماهای Quickstart برای اکثر APIها دستورالعمل هایی برای تولید این فایل دارند. هنگامی که فایل google-services.json را دانلود کردید، آن را در پوشه app/ پروژه Android Studio خود یا در پوشه app/src/{build_type} کپی کنید اگر از چندین نوع ساخت استفاده می کنید.

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

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