首页 > 解决方案 > 是否有一种与设备无关的方式来处理 Android 中简单的重复推送通知?

问题描述

推送通知在我所有运行低于 8.0 的设备上仍然运行良好,但任何 8.0+ 的设备都是一场噩梦。

假设我想要弹出一个简单的每日通知。它每天在特定时间关闭一次,即使应用程序已关闭。确切的时间不相关:

    AlarmManager am =(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, alarmnotify.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, ALARM_ID, i, PendingIntent.FLAG_UPDATE_CURRENT);
    am.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_DAY, pi);

在许多支持打盹的设备上,这不起作用,我必须使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle() 并在触发时刷新警报(烦人)。但是更多的设备,这也不起作用。

如果设备是库存的 Android,我可以请求“忽略电池优化特权”,但这对我的几乎所有测试设备都不起作用,因为一些愚蠢的 OEM 电池管理器运行在库存电池管理器之上。甚至三星现在也拥有其中之一。另外,谷歌不推荐这种方法,如果他们觉得你不需要它,它可以让你的应用被除名。

    Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + packageName));
    startActivity(intent);

如果我使用 AlarmManager.setAlarmClock(),某些设备可以工作,但这很愚蠢,我的应用程序不是闹钟,我只想显示通知。

我考虑过迁移到 FCM,但是通过一个简单的每日一次警报来构建客户端-服务器基础架构是荒谬的。另外,这带来了许多其他考虑。最简单的:如果用户离线怎么办?

即使在拥有数百万下载量的企业级应用程序中,我也注意到这是一个主要问题。我在 7.0 和 9.0 设备上安装了相同的应用程序。7.0 设备会收到通知,而 9.0 不会。是什么赋予了?

8.0 之后是否有一种通用的方法来处理警报,就像第一个片段对 8.0 之前的所有设备都是通用的一样?

标签: androidpush-notificationalarmmanager

解决方案


推荐阅读