افزونه Gradle سرویس‌های گوگل و فایل پیکربندی JSON

به عنوان بخشی از افزودن Firebase به پروژه اندروید خود، باید افزونه google-services Gradle و فایل پیکربندی google-services.json را به پروژه خود اضافه کنید.

اگر Firebase را با استفاده از کنسول Firebase ، رابط برنامه‌نویسی مدیریت REST یا رابط خط فرمان Firebase به پروژه اندروید خود اضافه کنید، باید افزونه Gradle و فایل پیکربندی JSON را به صورت دستی به پروژه خود اضافه کنید. با این حال، اگر Firebase Assistant for Android Studio استفاده می‌کنید، این وظایف به طور خودکار در طول راه‌اندازی برای شما انجام می‌شوند.

افزونه Gradle را اضافه کنید

افزونه‌ی Gradle مربوط به سرویس‌های گوگل ( google-services ) را به فایل build.gradle خود اضافه می‌کنید:

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

افزونه Gradle سرویس‌های گوگل دو عملکرد اصلی دارد:

  • فایل پیکربندی google-services.json را پردازش می‌کند و منابع اندرویدی تولید می‌کند که می‌توانند در کد برنامه شما استفاده شوند.

  • وابستگی‌هایی را برای کتابخانه‌های اساسی مورد نیاز برای سرویس‌هایی که فعال کرده‌اید اضافه می‌کند. این مرحله مستلزم آن است که افزونه 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
    ...

وقتی از طعم‌های محصول استفاده می‌شود، این ساختارهای دایرکتوری پیچیده‌تر نیز معتبر هستند.

// 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 که توسط منطق توضیح داده شده در بالا تعیین می‌شود، استفاده می‌شود.

تولید فایل‌های XML

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

هر مقدار در فایل‌های XML در فایل پیکربندی google-services.json در مکان‌های ذکر شده در زیر موجود است. اگر پروژه اندروید شما پیکربندی‌ای دارد که مانع از استفاده از افزونه google-services Gradle می‌شود، می‌توانید با خیال راحت فایل‌های 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
    

عیب‌یابی

هنگام ساخت، پیام خطای زیر را دریافت می‌کنم: File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it .

کنسول Firebase به شما کمک می‌کند تا فایل پیکربندی google-services.json را دانلود کنید.

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

من نمی‌توانم نمادهایی مانند R.string.gcm_defaultSenderId یا R.xml.global_tracker را پیدا کنم.

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