В настоящее время я наблюдаю странное поведение Firebase Messaging при использовании в моем приложении для Android.Уведомления не запускаются, если эмулятор пришел из перезапуска.Я понял, что мне нужно вручную включить или выключить Wi-Fi или мобильные данные (или наоборот).Затем после этого все уведомления в очереди будут отображаться последовательно.
Есть ли какая-то настройка, которую мне не хватает для FCM в моем приложении для Android или в API обмена сообщениями, который я использую в серверной части?
Заранее спасибо!
Обновление:
Проверено на Android KitKat, Lollipop, Marshmallow, Nougat, Oreo и Pie
Мне удалось применить обходной путь, который заключается в программном отключении, а затем включении Wi-Fi или мобильных данных.Ниже приведен мой код.
boolean wifi = false;
ConnectivityManager conMan = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if(conMan != null) {
Log.e(TAG, "NETWORK INFO IS NULL: " + (conMan.getActiveNetworkInfo() == null));
NetworkInfo netInfo = conMan.getActiveNetworkInfo();
if(netInfo != null) {
wifi = netInfo.getType() == ConnectivityManager.TYPE_WIFI;
}
}
final WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if(wifi) {
wifiManager.setWifiEnabled(false);
} else {
try {
setMobileDataEnabled(SplashScreen.this, false);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | NoSuchFieldException e) {
e.printStackTrace();
}
}
final boolean finalWifi = wifi;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(finalWifi) {
wifiManager.setWifiEnabled(true);
} else {
try {
setMobileDataEnabled(SplashScreen.this, true);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | NoSuchFieldException e) {
e.printStackTrace();
}
}}}, 200);
Из-за этого обходного пути все уведомления FCM в эмуляторах, подключенных через Wi-Fi, теперь работают.Однако программное включение и отключение мобильных данных поддерживается только до тех пор, пока KitKat (если у вас нет рутованного телефона), поэтому моя проблема по-прежнему возникает для всех версий Android, подключенных через мобильные данные, кроме Android Lollipop.