苹果的无声推送通知可以在后台启动我的应用程序吗?

根据苹果的文档,我可以通过在aps有效载荷字典中添加"content-available" = 1键值来注册无声通知。 我希望我的应用程序在无声通知到达时在后台唤醒。 我设置了App downloads content in response to push notificationsApp downloads content in response to push notifications送到我的info.plist中Required background modes

这是我的有效载荷字典

 {"aps": { "alert":"Notification alert","badge":1,"sound":"default","content-available":1 } } 

我在-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler获取callback-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler而我的应用程序在后台。 但我的问题是,当我们的应用程序处于死亡状态时,我们是否可以callback这个或任何其他方法?

我不希望我的应用程序用户看到通知,但我希望我的应用程序通过无声通知在后台唤醒来执行某些任务。

任何build议,将不胜感激。

当设备收到带有content-available的推送消息时,您的应用将在Apple的后台启动。 用户不会意识到这一点。 从文档 :

content-available(内容可用) :提供值为1的此键以指示新内容可用。 包含此键和值意味着当您的应用程序在后台启动或恢复时, 应用程序 -application:didReceiveRemoteNotification:fetchCompletionHandler:被调用。

我遇到过类似的情况,我编写了这个代码来debugging,如果我的应用程序正在唤醒静默通知或不。

 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *str = [defaults objectForKey:@"key"]; if (str == nil) { str = @"didReceiveRemoteNotification"; }else{ str = [NSString stringWithFormat:@"%@, didReceiveRemoteNotification",str]; } [defaults setObject:str forKey:@"key"]; [defaults synchronize]; } 

这个代码的作用就像,如果你的应用程序被唤醒,那么你将在这个方法中得到callback,并且方法名将被写入NSUserDefaults 。 所以,当你手动debugging你的应用程序时,你可以看到strstringvariables的值,如果有stringdidReceiveRemoteNotification比你会知道你的应用程序已经醒了。

注意:这只适用于我的背景模式。 当我不强制closures(手动终止)我的应用程序时,我得到的价值,但是当我强制closures从应用程序切换器我的应用程序,我不会得到任何价值。

我希望工程。