android - 某些 Android 版本的 Firebase 消息传递奇怪行为
问题描述
我目前在我的 Android 应用程序中使用 Firebase 消息时遇到了一些奇怪的行为。如果模拟器来自重新启动,则不会触发通知。我发现我需要手动打开 wifi 或移动数据然后关闭(反之亦然)。然后,所有排队的通知将连续显示。
在我的 Android 应用程序或我在后端使用的消息传递 API 中,我是否缺少某种 FCM 设置?
提前致谢!
更新:
在 Android KitKat、Lollipop、Marshmallow、Nougat、Oreo 和 Pie 上测试
我能够应用一种解决方法,即以编程方式禁用然后启用 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 除外)的原因。
解决方案
推荐阅读
- python - 在统计上成功的训练之后,结果并没有通过实时摄像机反映出来。我该如何解决这个问题?
- python - 类型错误:最小化()缺少 1 个必需的位置参数:'var_list'
- python - 在python中从包含min max的数组生成一个数据框
- android - Kotlin Android 扩展访问文本视图
- string - String.Split 到 DataRow 或 DataTable.Row.Add
- python - 为什么我的 for 循环覆盖变量而不是追加?
- php - 不能在不同设备/浏览器上同时登录同一个账号
- c++ - 为什么在 GLFW 窗口中使用此代码在我的屏幕上没有绘制立方体?
- amazon-web-services - Terraform 0.12.13 - 无法旋转 AWS 实例
- javascript - 如何在 Vue 的 iframe 中渲染子组件?