مقدمه
به عنوان بخشی از فعالسازی APIهای گوگل یا سرویسهای Firebase در برنامه اندروید خود، ممکن است لازم باشد افزونه google-services را به فایل build.gradle خود اضافه کنید:
dependencies {
classpath 'com.google.gms:google-services:4.4.4'
// ...
}
افزونهی google-services دو عملکرد اصلی دارد:
- فایل
google-services.jsonرا پردازش کرده و منابع اندرویدی تولید میکند که میتوانند در کد برنامه شما استفاده شوند. برای اطلاعات بیشتر به بخش افزودن فایل 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 ...
توجه: ارائه یک فایل 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_idgcm_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_keygoogle_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 جدید دریافت کنید.