推送通知代码执行(强制退出应用程序)

fer*_*spr 6 push-notification apple-push-notifications ios

我想知道像Whatsapp这样的应用程序如何能够向邮件的发件人发送送货回执(双绿色支票).

我已经看到,即使您强制退出Whatsapp(使用应用程序任务切换器并轻扫应用程序),发件人仍然会在手机上收到推送通知时获得送达回执(双绿色检查).显然,他们能够在接收推送通知时执行代码(向后端发出请求,通知交付).

由于iOS7可以发送带有"content-available"的推送通知有效负载:1,这使得通知的接收者能够执行用户代码,因此,首先我认为他们正在使用此功能.但是,如果用户强制退出应用程序,则在接收通知时不会执行用户代码.因此,我无法模仿Whatsapp行为.

我启用了功能>后台模式并检查了远程通知.

我正在用这种方法处理通知:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)

我正在发送带有此负载的通知:

{
    "aps":{
            "alert":"Hello world",
            "sound":"MySound.wav",
            "content-available":1
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经检查过:

我也读过有关PushKit的内容(虽然我没有尝试过),这可能对我有帮助,但我的理解是应用程序需要成为VOIP应用程序.很明显,我不想要求我的应用程序上的VOIP只在接收推送通知时执行代码.

谢谢.

Bar*_*kar 5

您刚刚在说明中回答了您的问题.

  1. 如果是强制退出,则无法通过常规推送通知唤醒应用程序.

    请参阅适用于iOS的App编程指南:

    在大多数情况下,系统在用户强行退出后不会重新启动应用程序.位置应用程序是一个例外,它在iOS 8及更高版本中被用户强行退出后重新启动.但是,在其他情况下,用户必须明确启动应用程序或重新启动设备,然后系统才能将应用程序自动启动到后台.

  2. VoIP推送通知可以唤醒应用程序,即使它是强制退出.

    请参阅IP语音(VoIP)最佳实践:

    如果在收到VoIP推送时它未运行,您的应用程序将自动重新启动.

  3. WhatsApp中的两个蓝色标记表示收件人阅读邮件.如果您收到两个蓝色标记,就在收到推送通知后,这是WhatsApp中的设计错误或错误,因为您无法判断用户是否实际阅读了通知.如果您得到两个灰色标记,这只是意味着,消息已传递给设备.再次,如果你得到两个灰色标记,就在收到推送通知并且应用程序强制退出之后,WhatsApp(错误)使用VoIP推送,或者他们只是假设推送已交付或将被交付.

  • 谢谢巴里斯.无论应用程序是否强行退出,我都会在收到推送通知后获得两个绿色(灰色)标记.那时我猜他们正在使用VoIP.我做了一些研究并测试了向iOS7上安装Whatsapp的设备发送消息,该设备没有VoIP推送(PushKit适用于iOS> = 8),在这种情况下,我没有得到两个绿色(灰色)标记,所以我可以得出结论,我的理论(他们使用的是PushKit VoIP推送)是正确的. (5认同)