San*_*aus 217 push-notification apple-push-notifications ios ios7
我通过content-available
在推送通知上使用标志来触发后台获取.我有fetch
和remote-notification
UIBackgroundModes
启用.
这是我在AppDelegate.m中使用的实现:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
NSLog(@"Remote Notification Recieved");
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Looks like i got a notification - fetch thingy";
[application presentLocalNotificationNow:notification];
completionHandler(UIBackgroundFetchResultNewData);
}
Run Code Online (Sandbox Code Playgroud)
当应用程序在后台运行时,它可以正常工作.(收到通知,应用程序触发"看起来像我收到通知"本地通知,因为上面的代码应该这样做).
但是,当应用程序未运行并且收到带有content-available
标志的推送通知时,应用程序不会启动,并且didRecieveRemoteNotification
永远不会调用委托方法.
WWDC视频最新的多任务处理(来自WWDC 2013的#204)显示了这一点:
它表示当收到带有content-available
标志的推送通知时,应用程序将"启动到后台" .
为什么我的应用程序没有启动到后台?
所以真正的问题是:
用户强行退出应用后,iOS会执行后台任务吗?
San*_*aus 213
UPDATE2:
您可以使用iOS 8中引入的新PushKit框架来实现这一点.虽然PushKit用于VoIP.因此,您的使用应该与VoIP相关,否则存在拒绝应用的风险.(见这个答案).
UDPDATE1:
iOS8的文档已经澄清.文档可以在这里阅读.以下是相关摘录:
使用此方法处理应用程序的传入远程通知.与
application:didReceiveRemoteNotification:
仅在应用程序在前台运行时调用的方法不同,系统会在您的应用程序在前台或后台运行时调用此方法.此外,如果您启用了远程通知后台模式,系统将启动您的应用程序(或将其从暂停状态唤醒),并在推送通知到达时将其置于后台状态.但是,如果用户强行退出,系统不会自动启动您的应用.在这种情况下,用户必须重新启动应用程序或重新启动设备,然后系统才会再次尝试自动启动应用程序.
虽然WWDC视频没有明确说明这一点,但在开发者论坛上进行快速搜索可以解决这个问题:
https://devforums.apple.com/message/873265#873265(需要登录)
另外请记住,如果你从应用程序切换器中删除你的应用程序(即向上滑动以杀死应用程序),那么无论推送通知或后台获取,操作系统都不会重新启动应用程序.在这种情况下,用户必须手动重新启动应用程序一次,然后从该点开始,将调用后台活动.- pmarcos
该帖子是由Apple员工发布的,所以我认为我可以相信这些信息是正确的.
所以看起来当应用程序从应用程序切换器中被杀死时(通过向上滑动),即使对于预定的后台提取,应用程序也永远不会启动.
run*_*mad 70
您可以在"管理方案"中将目标的启动设置更改为Wait for <app>.app to be launched manually
,这允许您通过设置断点application: didReceiveRemoteNotification: fetchCompletionHandler:
并发送推送通知以触发后台启动来进行调试.
我不确定它会解决这个问题,但它可能会帮助你进行调试.
小智 37
答案是肯定的,但不应使用"后台获取"或"远程通知".PushKit是您想要的答案.
总之,ios 8中的新框架PushKit是一种新的推送通知机制,它可以默默地将您的应用程序启动到后台,即使您的应用程序被从应用程序切换器中轻扫,也没有可视警报提示,令人惊讶的是您甚至无法看到它来自app切换器.
来自Apple的PushKit参考:
PushKit框架为您的iOS应用程序提供了接收来自远程服务器的推送的类.推送可以是两种类型之一:标准和VoIP.标准推送可以像以前版本的iOS一样提供通知.VoIP推送在VoIP应用程序所需的标准推送之上提供附加功能,以便在向用户显示通知之前执行推送的按需处理.
要部署此新功能,请参阅本教程:https://zeropush.com/guide/guide-to-pushkit-and-voip - 我已在设备上对其进行了测试,并且按预期工作.
Dan*_*nil 15
实际上,如果您需要测试后台提取,则需要在scheme中启用一个选项:
另一种测试方法:
以下是有关此新功能的完整信息:http: //www.objc.io/issue-5/multitasking.html
归档时间: |
|
查看次数: |
118740 次 |
最近记录: |