如何将数据从服务器发送到Android?

5
我正在处理一个项目,希望我的服务器向我的应用程序发送一些数据(无需从移动设备调用web服务)。这就像一个Web面板,可以操作移动应用程序以添加数据。因此,当用户在网站上添加数据并单击添加时,如果移动设备已连接到互联网,则应将该数据添加到移动应用程序中。这也类似于向Android应用程序发送命令。
我计划使用Push Notification(GCM)来实现这一点,但是推送通知不是一个好选择,因为我不想让用户知道我们正在向移动应用程序添加数据。即使应用程序处于非活动状态或未打开状态,它也应该添加数据。
我认为我有以下3个选项:
1. 在服务器和移动设备之间建立会话。开始客户端服务器通信。 2. 使用短信发送命令,然后根据要求调用Web服务。 3. 每隔15-20秒钟调用Web服务以检查是否有任何更新。(即使在后台)
请告诉我是否还有其他选项来实现这一点。

没有web-serviceGCM怎么可能呢?如果你不想使用web service,那就删除第二个和第三个选项。 - M D
根据我的看法,唯一的方法是在后台运行一个服务,从您的服务器获取数据并进行同步更新。我在许多应用程序中都这样做了。根据您的要求,“GCM”在这里不是有用的选项。 - M D
好的,谢谢@MD。请问如果我需要运行一个后台Android服务,那么这个Android服务是否需要调用一个Web服务来检查是否有更新呢?与选项3相同,但仅在后台服务中执行。 另外,您认为选项2怎么样?即向用户发送短信,监听器将检测并相应地执行。监听器还将立即从用户设备中删除该短信,以便用户不会收到通知。 - Sanchit Paurush
@MD 感谢您的帮助。您认为我还有其他选择吗? - Sanchit Paurush
2个选项,对于简单消息使用GCM。对于聊天,请使用XMPP。这将向应用程序发送消息,就像聊天应用程序一样。 - Dharmik
显示剩余3条评论
1个回答

6

我真的不知道你从哪里获取的信息,但你和MD都是错误的,GCM是最好的选择。

根据你的问题:

我打算使用Push Notification(GCM)实现这个需求,但是推送通知不是一个好的选择,因为我不希望用户知道我们正在向移动应用程序添加数据。

GCM与向用户显示通知有关,但它并不只是这样做。

GCM是“Google Cloud Messaging”,它仅向您的应用程序发送消息。此消息在BroadcastReceiver内接收。您可以从BroadcastReceiver内执行任何需要的操作,例如将信息与服务器同步。

以下是GCM BroadcastReceiver的可能实例实现:

这是一个简化的示例,不是完整的实现:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle b = intent.getExtras(); // you send those extras from your server
        int type = b.getInt("type");
        switch(type){
            case TYPE_SYNC:
                 // start a `Service` to sync data from your server 
            break;
            case TYPE_ADD_DATA:
                 long id = b.getLong("id");
                 String name = b.getString("name");
                 String descr = b.getString("descr");
                 // call code to add id, name, descr to your local data
            break;
            case TYPE_NOTIFICATION:
                 String title = b.getString("title");
                 String message = b.getString("message");
                 // call code to make a notification with title and message
            break;
        }
    }
}

在这个示例中,您的服务器可以发送3种不同类型的GCM消息。
  • TYPE_SYNC:会使您的应用程序启动一个后台服务,该服务将连接到服务器并同步信息
  • TYPE_ADD_DATA:将数据直接发送到消息中,并且直接添加到设备存储中(可能是SQLite)
  • TYPE_NOTIFICATION:这是唯一的选项,用户将得到有关任何内容的通知。其他两个选项对用户来说是透明的。
要进行完整的实现以及如何正确使用WakefulBroadcastReceiver,请查看官方文档:http://developer.android.com/google/gcm/client.html

你的回答相当详细,但是你不觉得GCM在实时数据方面的成功率很低吗?你会如何处理它? - Akshat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接