Первым и самым критичным шагом является обеспечение корректной базовой среды. Подавляющее большинство проблем родом отсюда.
- **Проверка наличия и версии Google Play Services на устройстве/эмуляторе.** Это можно сделать программно:
- **Совместимость версий.** В файле `build.gradle` вашего модуля убедитесь, что версии библиотек Google Play Services согласованы. Например, `com.google.android.gms:play-services-maps:18.2.0` и `com.google.android.gms:play-services-location:21.0.1` обычно совместимы, но использование сильно разнесенных версий может привести к неожиданным конфликтам классов. Старайтесь использовать BOM (Bill of Materials) для автоматического управления версиями: `implementation platform('com.google.firebase:firebase-bom:32.0.0')`.
- **API Key и конфигурация `google-services.json`.** Для API, требующих ключа (Maps, Places), ошибки часто связаны с неправильными ограничениями. Проверьте в Google Cloud Console:
* Не забудьте добавить оба отпечатка (debug и release) для отладки и продакшна.
* Файл `google-services.json` должен быть загружен в правильное место (`/app`) и его содержимое должно соответствовать вашему Firebase-проекту.
Далее, используйте логирование. Google Play Services и связанные библиотеки (Firebase) предоставляют расширенные логи. Включите детальное логирование в начале сессии отладки:
`adb shell setprop log.tag.FA VERBOSE`
`adb shell setprop log.tag.FA-SVC VERBOSE`
`adb shell setprop log.tag.GooglePlayServicesUtil VERBOSE`
Для Firebase Analytics и Crashlytics это покажет процесс инициализации и отправки данных. Также следите за выводом `logcat` с фильтром по тегам `GoogleApiAvailability`, `Auth`, `FusedLocationProvider` и т.д.
Работа с API клиентами и обратные вызовы. Многие проблемы — это тихие неудачи (silent failures) в колбэках.
* Всегда проверяйте объект `Task`, возвращаемый асинхронными вызовами. Используйте `addOnSuccessListener`, `addOnFailureListener` и `addOnCompleteListener`.
* В `OnFailureListener` объект `Exception` — ваш лучший друг. Это может быть `ApiException` с кодом статуса. Расшифруйте его:
* `CommonStatusCodes.TIMEOUT` — сетевая проблема.
* `CommonStatusCodes.INTERNAL_ERROR` — внутренняя ошибка сервера Google.
* `CommonStatusCodes.NETWORK_ERROR` — самоочевидно.
* `LocationSettingsStatusCodes.RESOLUTION_REQUIRED` — для геолокации: требуется включить GPS.
* `SignInStatusCodes.SIGN_IN_CANCELLED` — пользователь отменил вход.
* Для проблем с геолокацией убедитесь, что вы запрашиваете правильные разрешения (коarse/fine location) как во время выполнения (runtime), так и в манифесте. Проверяйте, включены ли сами службы геолокации на устройстве, используя `LocationSettingsRequest`.
Проблемы с Firebase Cloud Messaging (FCM). Отладка пуш-уведомлений — отдельный вызов.
- **Регистрация токена.** Убедитесь, что `FirebaseMessaging.getInstance().token` успешно возвращает токен. Логируйте его. Если токена нет, проверьте, добавлен ли `google-services.json` и правильно ли настроен проект Firebase (добавлено Android-приложение с правильным package name и SHA-1).
- **Получение сообщений.** Разделяйте два типа: уведомления (notification) и данные (data). Для отладки сообщений типа «data» отправляйте их через консоль Firebase или Postman, логируя в методе `onMessageReceived` (если ваш `Service` его переопределяет). Для «notification» в foreground логи также придут в `onMessageReceived`. В background обработка зависит от ОС.
- **Проверка доставки.** Используйте «Diagnose device» в консоли Firebase Cloud Messaging, введя регистрационный токен устройства. Консоль покажет его статус и последнюю активность.
В крайних случаях помогает полный сброс состояния. На физическом устройстве можно попробовать: «Настройки» -> «Приложения» -> «Google Play Services» -> «Память» -> «Управление памятью» -> «Очистить все данные». ВНИМАНИЕ: это удалит данные всех приложений, использующих GPS, и потребует повторной настройки некоторых сервисов. Используйте как последнюю меру.
Отладка Google Play Services — это сочетание методичной проверки конфигурации, внимательного чтения логов и понимания жизненного цикла асинхронных API. Инструменты Google, хотя и не всегда идеальны, предоставляют достаточно информации для решения 95% проблем, если знать, где искать.
Комментарии (14)