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

مقدمه

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

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

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

  1. فایل google-services.json را پردازش کرده و منابع اندرویدی تولید می‌کند که می‌توانند در کد برنامه شما استفاده شوند. برای اطلاعات بیشتر به بخش افزودن فایل JSON مراجعه کنید.
  2. وابستگی‌های کتابخانه‌های پایه مورد نیاز برای سرویس‌هایی که فعال کرده‌اید را اضافه کنید. این مرحله مستلزم آن است که افزونه Google Services Gradle را در فایل app/build.gradle خود اعمال کنید، مانند زیر:
    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

فایل google-services.json ساختار اساسی زیر را دارد:

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

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

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

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

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

نتیجه اصلی پردازش 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>

هر مقدار در فایل‌های XML در فایل google-services.json در مکان‌های زیر موجود است. اگر پروژه اندروید شما پیکربندی‌ای دارد که مانع از استفاده از افزونه google-services می‌شود، می‌توانید با خیال راحت فایل‌های XML را به صورت دستی و با استفاده از این مقادیر بازسازی کنید:

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

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

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

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

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