簡體   English   中英

兩次調用遠程通知方法

[英]Remote notification method called twice

我已經在我的應用程序委托中實現了application:didReceiveRemoteNotification:fetchCompletionHandler:來響應推送通知。

當應用程序處於后台時收到通知時,將立即調用此方法,並在完成后獲取新數據並執行完成塊。 全部按照文檔。 但是,如果我點擊通知警報,則會再次調用此方法,從而導致另一個網絡調用和UI更新。 我希望該方法對於每個推送通知都被調用一次,而不是在接收到一次之后再在操作時一次調用。

其他人如何實現此方法?

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    [self loadSomeResource:^(NSData *data,NSError *error){
        if (error) {
            completionHandler(UIBackgroundFetchResultFailed);
        }
        else if (data){
            completionHandler(UIBackgroundFetchResultNewData);
        }
        else {
            completionHandler(UIBackgroundFetchResultNoData);
        }
    }];
}

當您收到推送通知時,以下是application:didReceiveRemoteNotification:fetchCompletionHandler:方法中要注意的事項:
1.當未啟動應用程序時(即,當應用程序既不在后台也不在前台時),該方法被調用一次, applicationState將為UIApplicationStateInactive
2.當應用程序處於前台時,該方法將被調用一次, applicationState將為UIApplicationStateActive
3.當應用程序處於后台時,該方法被調用兩次,一次是在收到推送通知時,另一次是在點擊該通知時。 當您收到推送通知時, applicationState將為UIApplicationStateBackground ,當您點擊該通知時, applicationState將為UIApplicationStateInactive

applicationStateUIApplicationStateBackground時,我們可以忽略它,因此,對於這三種情況,我們只能處理一次推送通知。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    if (application.applicationState == UIApplicationStateBackground) {
        completionHandler(UIBackgroundFetchResultNoData);
        return;
    }

    // Do whatever you need here and call completionHandler with appropriate UIBackgroundFetchResult
}

檢查application.applicationState以了解您是處於后台還是處於非活動狀態,並采取相應的措施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM