可以在局域网中使用 android 推送通知吗?没有互联网

Is posible use android push notifications in lan? without internet

我的问题是: 我可以在局域网环境中实现 android 推送通知吗?

有什么技巧吗?

谢谢!

不是默认的 firebase 服务,因为它们需要您连接到互联网才能接收来自 firebase 的推送。

但是您可以在设备上手动创建推送通知,

 NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, SOME_CHANNEL_ID)
            .setSmallIcon(R.drawable.icon_notif)
            .setColor(getResources().getColor(R.color.primary))
            .setContentTitle(title)
            .setContentText(text)
            .setAutoCancel(true)
            .setStyle(new NotificationCompat.BigTextStyle()
               .bigText(text)
            );

    Intent intent = new Intent(getApplicationContext(), LauncherActivty.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);


    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    notificationBuilder.setContentIntent(pendingIntent);
    NotificationManager notificationManager =  (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(notificationGroup, SOME_NOTIFICATION_ID, notificationBuilder.build());

这将在此设备上创建推送通知(或更新现有设备)

剩下的就是添加设备之间的通信部分,以便在目标设备上触发推送通知创建

https://developer.android.com/training/connect-devices-wirelessly/wifi-direct 例如

没有。如果没有互联网,则无法手动激活与官方 OS 供应商基础设施分开的 OS 推送通知触发系统。

可能有办法做到这一点,non-standard 表示:

  • 欺骗性 DNS
  • 被盗的推送通知证书
  • (手动插入 CA [尽管证书可能固定在应用程序中])
  • 根OS覆盖

没有省电机制,仍然可以与应用程序通信,但不如“battery-efficiently”“可靠”。

解决方法:

  • 让你的应用程序保持清醒(有一些技术可以做到这一点,但在许多类型的设备上并不总是可靠);和
  • 您自己的网络通道(TCP 连接、HTTP/TCP 连接、TCP 轮询、HTTP 轮询)
  • 作为备份,用户可以帮助保留该应用程序 运行。指示器可以提供帮助,向用户显示应用程序是否仍连接到服务器。对于 user-reliability,您可以在应用程序即将“停用”时向用户显示通知,以便用户可以帮助并重新激活该应用程序。

“推送通知”和“通知”的命名对很多人来说是模棱两可的。

通知(没有推送这个词)

defined by Android作为

A notification is a message that Android displays outside your app's UI

这就是@FinnMarquardt 在他们的回答中提供的帮助 -

这甚至可以在没有任何网络连接的情况下完成。当您的应用程序启动时,您可以显示一条通知,例如“应用程序刚刚启动”。所以这个概念指的是一个App可以使用的UI组件,不涉及联网。

推送 通知

“推”这个词意义重大:

  • Channel - 由 OS 供应商 (Google) 管理的特定通信渠道;和
  • Trigger - OS 中唤醒您的 App
  • 的触发器
  • 不是通知 (UI) - 此机制不显示通知

通道很方便,因为您不需要构建它(协议和分发服务器),但它是您可以自己构建的东西。

触发器方面无法复制。对于整个智能手机来说,省电是非常重要的。它允许应用程序进入休眠状态,并让 OS 为整个智能手机处理一次这种机制。对于 Android,请参阅 https://developer.android.com/training/monitoring-device-state/doze-standby,然后记下“在设备空闲时使用 FCM 与您的应用交互”部分

FCM high-priority messages let you reliably wake your app to access the network, even if the user’s device is in Doze or the app is in App Standby mode

应用的打瞌睡模式无法自行唤醒。您需要一个 OS 机制来执行此操作,因为 Android 这意味着推送通知 (FCM)。

推送通知机制本身与前面解释的“通知”无关。 “推送通知”可能会触发应用程序显示“通知”,但不一定。例如,它可能会触发应用程序获取位置 (GPS) 读数,并将该数据发送到服务器。