让服务器后端告诉iOS应用程序更新数据

让服务器后端告诉iOS应用程序更新数据,ios,ruby-on-rails,apple-push-notifications,Ios,Ruby On Rails,Apple Push Notifications,我目前有一个iOS应用程序,它运行一个线程(通过NSTimer),每10秒轮询一次后端ruby on rails服务器,以更新UITableView。这样做的原因是tableview应该在iPad上随时打开,以便能够反映服务器数据的变化 我的问题是——有没有更好的办法?我可以使用苹果推送通知系统告诉我的应用程序从服务器更新数据,而不向用户显示通知吗?(我曾经用安卓GCM告诉一个应用程序在不显示通知的情况下进行更新,但我不确定苹果是否允许这样做)如果是,怎么做 是否有其他解决方案通知我的iOS应用

我目前有一个iOS应用程序,它运行一个线程(通过
NSTimer
),每10秒轮询一次后端ruby on rails服务器,以更新
UITableView
。这样做的原因是tableview应该在iPad上随时打开,以便能够反映服务器数据的变化

我的问题是——有没有更好的办法?我可以使用苹果推送通知系统告诉我的应用程序从服务器更新数据,而不向用户显示通知吗?(我曾经用安卓GCM告诉一个应用程序在不显示通知的情况下进行更新,但我不确定苹果是否允许这样做)如果是,怎么做


是否有其他解决方案通知我的iOS应用程序更新服务器更改的数据?

您可以在没有警报负载的情况下发送推送通知


无论通知是否有警报,如果你的应用程序在前台运行,推送通知将始终发送给你的应用程序代理进行处理——因此,如果你的iPad专用于运行你的应用程序,它可能不会显示警报(如果有)

自iOS7以来,您可以像Android GCM一样向应用程序发送无声的oush消息。您只需将以下键值对与有效负载一起发送:

aps =     {
    "content-available" = 1;
};
这样,推送消息将不会显示在横幅或警报中,您可以在应用程序代理中收到消息时更新tableview:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    // update your application
}

但是,如果推送通知未送达,会发生什么情况?APNS不保证送货,是吗?不,不是。如果需要,可以考虑实现握手机制。当您在设备上收到数据时,您会向服务器发送确认信息,如果服务器没有收到确认信息,它会重新发送信息。我想知道解决此类问题的通常方法是什么?我想这很常见吧?握手机制是一个简单的解决方案吗?你能给我指一下正确的方向吗?谢谢通常情况下,我在应用程序中所做的是,我只依赖APN,因为推送通知未送达的情况非常罕见(事实上,我以前从未见过这种情况发生)。但是,如果您的数据非常关键,并且您必须确保它已传送到您的设备,那么您可以选择使用握手机制。您也可以考虑使用Web套接字,但它比推送服务更复杂。