2013-12-16 36 views
4

我有一个应用程序,使用远程/推送通知。应用程序:didReceiveRemoteNotification:fetchCompletionHandler:多次调用。如何避免?

使用远程通知的后台模式,并且一切按预期工作。应用程序唤醒并从服务器获取所有需要的数据。

但是,如果通知中心没有清除推送通知警报,并且用户单击它,application: didReceiveRemoteNotification: fetchCompletionHandler:方法将被再次调用,这意味着它会向服务器发送新请求,这是不受欢迎的行为。

第一种选择是检查应用程序的状态,但引起了我的问题,当应用程序在suspended.I必须做类似下面的代码,但是这并没有为我工作:

if([UIApplication sharedApplication].applicationState == UIApplicationStateActive || [UIApplication sharedApplication].applicationState == UIApplicationStateBackground){ 

    } 
    if([UIApplication sharedApplication].applicationState == UIApplicationStateInactive){ 

    } 

第二种选择是,在用户打开应用程序时是否有办法清除来自通知中心的警报,但我找不到方法来执行此操作。

那么有没有办法避免第二次拨打application:didReceiveRemoteNotification: fetchCompletionHandler:方法?

+0

在哪种情况下,您遇到过2次调用方法'application:didReceiveRemoteNotification:fetchCompletionHandler:'? – bobsacameno

+0

非常简单:如果您使用“content-available”进行远程通知:1设备醒来(不是每次都是)并执行应用程序:didReceiveRemoteNotification:fetchCompletionHandler:如果您的通知也是交互式(警报,徽章和声音)和用户点击警报应用程序:didReceiveRemoteNotification:fetchCompletionHandler:再次被调用。 – Foriger

回答

2

您可以在您的APNS消息中发送唯一ID,然后通过重新记录该ID来过滤第二个电话 - 无论是在您的应用程序的临时集合中(然后在第二次如果您在APNS消息收到并单击之后杀死应用程序,持久存储(以避免在任何情况下发生第二次呼叫)。

+0

我认为,这是唯一的选择。 – Foriger

+0

正确地说,目前这是唯一的选择,但我对苹果为每个通知提供的任何唯一ID感兴趣,以便我们可以比较是否在* didReceiveRemoteNotification:fetchCompletionHandler:*方法中再次处理同一通知。 – Zaraki

相关问题