![](/img/trans.png)
[英]Remote Notification 'application:didFinishLaunchingWithOptions:' method not called
[英]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 。
當applicationState為UIApplicationStateBackground時,我們可以忽略它,因此,對於這三種情況,我們只能處理一次推送通知。
- (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.