Firebase сообщение не получено на эмуляторе
Я следовал инструкциям в /questions/15526895/fcm-s-aws-sns/15526896#15526896 чтобы подключить SNS к FCM к приложению Android. При развертывании в эмуляторе приложение инициализируется, но не получает никаких сообщений. Это же приложение работает правильно на моем фактическом устройстве Nexus 6 и получает сообщения. Почему эта разница?
4 ответа
На эмуляторе установлены сервисы Google Play?
источник: https://firebase.google.com/docs/cloud-messaging/android/client
Приложения, использующие SDK Play Services, должны всегда проверять устройство на наличие совместимых APK-сервисов Google Play, прежде чем получить доступ к функциям сервисов Google Play. Рекомендуется делать это в двух местах: в методе основного действия onCreate() и в методе onResume(). Проверка в onCreate() гарантирует, что приложение не может быть использовано без успешной проверки. Проверка в onResume() гарантирует, что если пользователь вернется в работающее приложение с помощью других средств, например, кнопки "Назад", проверка все еще будет выполнена.
Если устройство не имеет совместимой версии служб Google Play, ваше приложение может вызвать GoogleApiAvailability.makeGooglePlayServicesAvailable(), чтобы пользователи могли загружать службы Google Play из Play Store.
Потому что эмулятор не имеет API Google. Поэтому, чтобы проверить уведомление или сообщение, вы должны проверить его на реальном устройстве, на котором установлены службы Google.
Для служб Google, таких как GCM, используйте цель "API Google" (любая версия) для получения push-уведомлений или сообщений от fcm.
Этот ответ написан в сентябре 2021 года со следующими зависимостями Gradle:
implementation 'com.google.firebase:firebase-messaging:22.0.0'
implementation 'com.google.firebase:firebase-iid:21.1.0'
Иногда эмулятор перестает получать уведомление FCM, вот что я делаю, чтобы решить эту проблему:
1- Выберите эмулятор с Google API.
2-стирание данных:
3-Используйте функцию ниже, чтобы получить идентификатор многоадресной рассылки или узнать причину сбоя регистрации.
private void check_token() {
String TAG = "_testing";
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.e(TAG, "getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
// Log and toast
// String msg = getString(R.string.msg_token_fmt, token);
Log.e(TAG, token);
Toast.makeText(MainActivity3.this, token, Toast.LENGTH_SHORT).show();
}
});
}
Получив токен, вы можете попробовать отправить уведомление.
Примечание. Нет необходимости входить в систему с учетной записью Google. FCM работает без входа в Gmail.
Работало после создания нового эмулятора вAndroid Studio
>AVD Manager
сAndroid SDK
на котором установлены `API Google
Также убедитесь, чтоSDK Manager
>SDK Tools
>Google Play Services
установлен