当我在Android应用中使用Firebase Messaging时,我目前遇到一些奇怪的行为。如果模拟器来自重新启动,则不会触发通知。我发现我需要手动打开或关闭wifi或移动数据(反之亦然)。然后,所有排队的通知将连续显示。
我的Android应用程序或后端使用的Messaging API是否缺少针对FCM的某种设置?
谢谢!
更新:
在Android KitKat,棒棒糖,棉花糖,牛轧糖,奥利奥和派上进行了测试
我能够进行一项工作,以编程方式禁用然后启用wifi或移动数据。下面是我的代码。
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);
由于此替代方法,通过Wifi连接的仿真器中的所有FCM通知现在都可以使用。但是,只有在KitKat之前(除非您拥有扎根的手机),才以编程方式打开然后关闭移动数据。这就是为什么通过移动数据连接的所有Android版本(除Android Lollipop之外)仍然会出现我的问题。