服务器是否可以通知iOS / Android应用程序有关用户知道的更改


Can a server notify iOS/Android app about changes whitout the users being aware?

我是移动开发的新手,我有一个项目要做,我花了整整几天的时间寻找问题的解决方案,直到我迷路了,所以我希望我能在这里找到最终答案。

我有一个服务器(php和MySQL DB),并在iOS + Android中开发一个移动应用程序,可以从服务器检索数据。移动应用程序应在第一次运行时从服务器获取数据并将其保存在手机中,以便每当它再次运行时,它都会获取存储的数据。

每当进行更改时,服务器都应"在用户不知道的情况下"通知应用程序,以便应用程序可以立即更新数据。

我想过使用网络服务(可能是带有 RestKit 的 REST)或在服务器记录上应用某种时间戳,这些都不是问题。

我的问题是我找不到一种方法让服务器本身在发生更改时通知应用程序有关更改,并允许应用程序更新新数据。我想过使用推送通知,但是 - 特别是在 iOS 中 - 它无法对用户隐藏。

那么有没有可能的方法呢?复杂吗?值得吗?其他建议?

正如我所说,我是新人,所以也许我的想法错了,在这种情况下很抱歉,我搜索了问题,无法找到问题的答案。

你能解释一下你想做什么吗?这里的经典习语是在应用程序启动时更新数据(您可以使用缓存版本,因为它仍然是最新的,如果用户没有连接)如果用户不知道,为什么要更新数据?

至少

在iOS中,解决方案是使用Apple推送通知。如果您不想具有侵入性并希望它尽可能透明,则可以定义所需的"通知"信号类型,如下所示:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

至于后台进程,我认为你无法做到这一点。Apple对您可以在后台执行的操作非常严格(不是后台线程,而是当您不在应用程序中时后台作为工作过程)。我的建议是使用通知徽章,这样用户就会知道有新的东西,当他进入应用程序时,您可以开始更新。


我必须同意Yase的观点:

如果用户不知道,为什么要更新数据?

您应该始终使其尽可能用户友好。在我看来,不让您的用户知道应用程序可能会消耗资源是不好的。想象一下,您正在更新 2mb 的信息,而用户使用的是 3G...

我不确定我是否正确遵循了您的问题,但听起来您希望服务器知道已进行更改,然后通知用户这些更改。

为什么不运行一个cron作业来检查服务器的任何定时周期,然后向用户发送推送通知(在iOS上)

iOS 推送通知教程

我几乎没有Android经验,但是在这些设备上进行推送通知似乎更棘手。(我相信有人会尽快纠正我:D)

这可能会有所帮助:

安卓推送通知

在 iOS 上,如果用户不知道该应用程序,这是不可能的 - 您可以从服务器端更新应用程序数据的唯一方法是......

  1. 。应用程序已打开,并且您正在打开 TCP 连接
  2. 。您发送推送消息(以便用户打开应用程序)

在这两种情况下,用户都知道应用程序正在运行。您可以做的是在用户使用应用程序时在后台更新数据。您可以使用推送消息让用户打开应用。但仅此而已。

在Android上,如果您让应用程序运行后台服务,可能会有更多可能性,但是不要忘记,如果应用程序耗尽电池等,用户将删除您的应用程序。

对于应用程序数据更新,您应该检查服务器上的数据版本。最好的方法是让你的应用在每次用户启动应用程序时询问你的服务器:用户启动应用程序 -> 应用询问服务器是否有 RESTful API 风格的新数据 ->服务器响应是/否 ->如果有新数据,应用程序将其加载到设备。