推送通知代码执行(强制退出应用)
Posted
技术标签:
【中文标题】推送通知代码执行(强制退出应用)【英文标题】:Push Notification code execution (forced-quit app) 【发布时间】:2015-08-14 18:33:07 【问题描述】:我想知道像 Whatsapp 这样的应用程序如何能够向消息的发件人提供送达回执(双重绿色检查)。
我已经看到,即使您强制退出 Whatsapp(使用应用程序任务切换器并刷掉应用程序),发件人仍然会在收到推送通知的那一刻收到交货收据(双绿色检查)电话。显然,他们能够在收到推送通知时执行代码(向后端发出请求,通知交付)。
由于ios7可以发送带有“content-available”的推送通知有效负载:1,这使得通知的接收者能够执行用户代码,所以,首先我以为他们正在使用这个功能。 但是,如果用户强制退出应用程序,则在收到通知时不会执行用户代码。因此,我无法模仿 Whatsapp 的行为。
我已启用功能>后台模式并检查了远程通知。
我正在使用这种方法处理通知:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
我正在使用此有效负载发送通知:
"aps":
"alert":"Hello world",
"sound":"MySound.wav",
"content-available":1
我已经检查过了:
Will iOS launch my app into the background if it was force-quit by the user? WWDC 视频 Whats New With Multitasking(来自 WWDC 2013 的#204)我还阅读了有关 PushKit 的信息(尽管我没有尝试过),这可能对这里有所帮助,但我的理解是该应用程序需要是一个 VOIP 应用程序。显然,我不想让我的应用程序上的 VOIP 在收到推送通知时只执行代码。
谢谢。
【问题讨论】:
【参考方案1】:您刚刚在描述中回答了您的问题。
如果应用被强制退出,则无法通过常规推送通知唤醒应用。
见App Programming Guide for iOS:
在大多数情况下,系统在应用程序被强制后不会重新启动它们 由用户退出。一个例外是位置应用程序,它在 iOS 8 和 后来被用户强制退出后重新启动。其他 但是,在某些情况下,用户必须明确启动应用程序或重新启动 应用程序可以在设备启动前自动进入 系统后台。
VoIP 推送通知可以唤醒应用,即使它被强制退出。
见Voice Over IP (VoIP) Best Practices:
如果您的应用在 VoIP 时没有运行,它会自动重新启动 收到推送。
WhatsApp 中的两个 蓝色 标记表示收件人已阅读消息。如果您在收到推送通知后获得两个 蓝色 标记,则这是 WhatsApp 中的设计错误或错误,因为您无法判断用户是否真的阅读了通知。如果您得到两个 灰色 标记,则仅表示消息已发送到设备。同样,如果您在收到推送通知并且应用程序被强制退出之后获得两个 灰色 标记,则 WhatsApp 正在(错误)为此使用 VoIP 推送,或者他们只是假设推送是已交付或将交付。
【讨论】:
谢谢巴里斯。在收到推送通知后,无论应用程序是否强制退出,我都会得到两个绿色(灰色)标记。我猜当时他们正在为此使用VoIP。我做了更多的研究并测试了向在没有 VoIP 推送的 iOS7 上安装了 Whatsapp 的设备发送消息(PushKit 适用于 iOS>=8),在这种情况下,我没有得到两个绿色(灰色)标记,所以我可以得出结论,我的理论(他们使用 PushKit VoIP 推送)是正确的。以上是关于推送通知代码执行(强制退出应用)的主要内容,如果未能解决你的问题,请参考以下文章
当用户通过向上滑动强制退出应用程序时,可操作的推送通知不会出现在 iOS 8+ 设备上