如何使用java RESTful Web服务将通知推送到Android应用程序

时间:2015-05-12 18:07:31

标签: java android web-services rest

我正在编写一个必须从java RESTful网络服务接收通知的Android应用程序,例如gcm(谷歌云消息传递)。如果有人知道这是怎么做的,请指教我。谢谢!

1 个答案:

答案 0 :(得分:0)

Android应用程序无法像服务器那样接收HTTP消息。您可以使用GCM或实现某种为您检索信息的轮询系统。

弱解决方案: 使用警报管理器,您可以每隔10秒轮询服务器,并获取为您存储的任何信息。

更好的解决方案: 使用长轮询,我的意思是你的应用程序,你应该发送HTTP消息并让它等待30秒,如果没有新的数据发送到服务器然后它将返回没有数据,直接返回再次。如果在该30秒期间的任何时刻服务器接收到一些数据,则将其添加到列表中并告知该消息以释放回具有该列表的电话。只有每次都期待相同类型的信息时,这才会真正起作用。

最佳解决方案: 再次,使用长轮询。但是,不是使用新数据将HTTP消息发回电话,而是返回收到的新数据类型的列表,就像您可以告诉它有一条新的短信等待。然后,当手机收到回复时,手机会发现待处理的消息,然后您可以发送一条Get消息并从存储的列表中检索该消息。

希望有所帮助,解释得有点快!

有关构建Java RESTful服务的帮助,请查看以下链接:https://spring.io/guides/gs/rest-service/

我假设您已经了解RESTful服务的工作原理,如果没有,那么该链接应该有所帮助。至于“更好的解决方案”的示例,只需从使用GET调用创建基本服务开始,该服务返回一个字符串,以便您知道它正在工作。当你有了这个时,你只需要一个方法来轮询每x秒返回一个新数据的列表..

/**
 * This is the method you poll every x seconds
 * @return
 */
public List<Location> eventPoll() {
    ArrayList<Location> oldData = new ArrayList<>(m_Location);

    // small possibility this could get a new piece of data thats not in 'oldData' and
    // which would be cleared. Would be better looping through removing each piece
    // individually comparing it to the oldData
    m_Location.clear();

    return oldData;
}

我不确定您是如何计划将位置数据导入服务的,但为了简单起见,只需将其添加到ArrayList中即可。

/**
 * This is the method that stores the new data
 * @return
 */
public Location storeNewLocation(Location location) {
    m_Location.add(location);
}

**警告,未经测试。字面意思只是现在写在这里**

同样,这一切都是假设您知道如何执行前面的部分(构建服务),如果没有,那么该代码还没有多大帮助。祝你好运!