2013-12-16 63 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

相關問題