为什么Android推送通知会调用Application create并触发AppStartup

问题描述 投票:0回答:2

我注意到,当我向我的设备发送推送通知(Firebase Messaging Service)时,我的应用程序对象被创建。这是无需点击通知的情况。只需查看通知即可创建应用程序。此外,它还启动 Jetpack AppStartup 库。我希望能够使用 AppStartup 和应用程序创建。但我不想在发生推送通知时启动该代码。

Android 为什么要这样做?这是所有android通知的一部分,还是我正在使用的第三方推送通知sdk的功能? Application.create 和 AppStartup 中有没有办法区分正常的应用程序启动和推送通知触发的启动?

再次强调,我不是在谈论用户单击通知(并由于深层链接而启动应用程序)。我说的是仅查看通知下拉列表中的通知。

android push-notification app-startup
2个回答
0
投票

Android 为什么要这样做?

Android 正在启动您的应用程序进程以在您的应用程序中运行代码。创建一个

Application
实例并调用
onCreate()
将是其中的一部分,创建任何
ContentProvider
对象也是如此。 IIRC,Jetpack Startup 使用
ContentProvider
在流程的早期获得控制权,尽管我对此不是 100% 确定。

Android 启动您的应用程序进程的原因是您的应用程序导致显示

Notification
- 具体来说,Firebase Cloud Messaging 正在执行此操作。如果我没记错协议,Play Services 正在发送广播
Intent
,应用程序中的 Firebase Cloud Messaging 将响应该广播,并且该代码的一部分将显示
Notification

Application.create 和 AppStartup 中有没有办法区分正常的应用程序启动和推送通知触发的启动?

onCreate()
子类的
Application
无法知道具体是什么原因导致进程被创建,因为可能有很多原因。如果“AppStartup”指的是 Jetpack Startup,我不记得它在这里有任何选项,但我没有花太多时间使用它的 API。


0
投票

如果可以的话,请尽可能减少初始化程序和应用程序类,并确保它们不会执行或启动任何工作。将任何此类工作推迟到创建 Activity 组件时。在 Activity.onCreate 回调中,您可以安全地假设您的应用程序是通过用户操作启动的,而不是通过广播事件、服务启动/绑定或内容提供商请求启动。

Google 实际上应该以某种方式解决这个问题,因为不良行为者可能会滥用 Firebase 推送通知作为一种非常廉价的 DDoS 机制。

考虑一个手电筒应用程序,该应用程序将 Web 请求发送到安装在 100 万台 Android 设备上的 Application.onCreate 中的某个服务器。向此手电筒应用程序的每个用户发送推送通知。由于每秒 1M 请求,服务器将会宕机。

© www.soinside.com 2019 - 2024. All rights reserved.