Android/Java:即使应用程序没有“积极”使用,如何向用户发送通知?

Posted

技术标签:

【中文标题】Android/Java:即使应用程序没有“积极”使用,如何向用户发送通知?【英文标题】:Android/Java: how to send notifications to user, even when app is not "actively" being used? 【发布时间】:2019-08-12 18:03:18 【问题描述】:

如果发生变化,我希望能够向用户发送通知。 例如,我的申请与犯罪有关。因此,用户可以提交他们所在社区发生的犯罪报告。

当报告新的犯罪时,我希望能够向该特定社区中的所有用户发送通知,即使他们没有积极使用该应用。

如何做到这一点?我对此很陌生,但据我了解,Firebase Messaging 等服务要求您手动输入消息并选择用户手动发送消息。我想知道是否有一种方法可以在不需要人手动工作的情况下完成?

类似于 snapchat/instagram 和其他东西如何在您不使用手机时向您发送有人向您发送消息的通知。

就我而言,我只想显示相同的标准通知“您所在地区的新犯罪”...

我该怎么做? (目前通知我只是使用通知渠道),非常感谢!

【问题讨论】:

您完全误解了 Firebase 云消息传递。它们通常根本不是短信。它只是一个 PUSH 消息实现,完全适用于这个用例 【参考方案1】:

您可以通过 FCM 集成使用 Parse Server 轻松完成此操作。

首先,您需要设置您的 android 应用以接收推送通知

只需按照此快速入门:https://docs.parseplatform.org/parse-server/guide/#push-notifications-quick-start

二、需要创建云代码函数

我建议你创建一个云代码函数,它将接收社区作为参数,将查询该社区中的用户安装并向所有用户发送推送通知。

应该是这样的:

Parse.Cloud.define('notifyCrime', async req => 
  const query = new Parse.Query(Parse.Installation);
  query.equalTo('neighborhood', req.params.neighborhood); // I'm supposing you have a field called neighborhood in your installation class - if not, you can save this field there when the user sign up
  await Parse.Push.send(
    where: query,
    data: 
      alert: 'There is a crime in your neighborhood'
    ,
    useMasterKey: true
  );
);

参考:https://docs.parseplatform.org/js/guide/#sending-pushes-to-queries

第三,你需要从你的安卓应用中调用云函数

一旦有用户报案,您可以调用您在步骤 2 中创建的云代码函数来通知同一街区的所有其他用户。

应该是这样的:

HashMap<String, Object> params = new HashMap<String, Object>();
params.put("neighborhood", "The neighborhood goes here");
ParseCloud.callFunctionInBackground("notifyCrime", params, new FunctionCallback<Object>() 
   void done(Object response, ParseException e) 
       if (e == null) 
          // The users were successfully notified
       
   
);

参考:https://docs.parseplatform.org/cloudcode/guide/#cloud-functions

【讨论】:

嗨!非常感谢您的详细回答:) 我对此很陌生,所以我可能有点困惑,但是,您发送给我的链接中的代码似乎不是 Java 的?我能找到 Java 的等价物吗? 第一步有一个链接,教你如何设置你的android java代码来接收推送通知。第二个链接是用 javascript 编写的。出于安全原因,您不应直接从客户端发送推送通知。这将是安全漏洞,黑客可能会向您的所有用户发送不良消息。因此,您需要在 javascript 中创建一个云代码函数,该函数将在服务器端发送推送。在第三步中,代码在 java 中,并显示了您将如何从您的 android java 应用程序调用云代码函数。【参考方案2】:

“我理解 Firebase 消息传递等服务要求您手动输入消息并选择要手动发送消息的用户”。

这并不完全正确。有一个名为 Firebase Topic Messaging 的方法,可让您仅向特定用户群发送通知。您必须从应用程序注册该主题,然后,您可以根据他们订阅的主题向您的用户组发送自定义消息。

【讨论】:

这根本不是真的。 FCM 是一种推送消息解决方案。 OP 似乎认为它是一种聊天机制(您可以在其之上构建聊天,但它不是聊天协议)。 我不认为这是一种聊天机制,我知道它是用于推送消息,但我对 FCM 的理解是我需要登录并键入要发送的消息。如何避免这种情况,以便在提交新报告时自动执行此操作? @GabeSechan “聊天”的概念从何而来?如果他的要求是发送时间不紧迫的通知,那么使用主题消息传递有什么问题? @keyoshi998 我不知道你从哪里得到这样的印象,但它完全错误。甚至有一种方法可以做你刚才描述的事情。它不发送短信,也不显示通知。它是一种发送数据的方式。如果你的应用程序没有明确地对这些数据做一些事情,那么任何地方都没有输出。某处可能有一个 Web 应用程序将特定数据包发送到某台机器,但它从未用于测试目的以外的任何其他用途。 @GabeSechan 感谢您的澄清。您的评论对我有误导性,因为它没有提及上下文。我还以为是在说别的呢。无论如何谢谢:)

以上是关于Android/Java:即使应用程序没有“积极”使用,如何向用户发送通知?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到“服务未注册”异常,即使我没有在 Android - Java/Kotlin 中使用任何服务?

Android/Java JDBC MySQL - 获取行 - 有效算法

急急急!! 由于目标机器积极拒绝 ,无法连接, 该怎么办 ?

wcf 上没有积极收听的频道

有没有更优雅的方法来减少这种积极/消极的逻辑?

Android java.net.UnknownHostException:主机未解析