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

Push Notification code execution (forced-quit app)

我想知道像 Whatsapp 这样的应用程序如何能够向消息的发件人提供送达回执(双重绿色检查)。

我已经看到,即使您强制退出 Whatsapp(使用应用程序任务切换器并滑动应用程序),发件人仍然会在收到推送通知的那一刻收到送达回执(双绿色勾选)在 phone 上。显然他们能够在收到推送通知时执行代码(向后端发出请求,通知交付)。

因为 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
    }
}

我已经检查过:

我还阅读了有关 PushKit 的信息(虽然我没有尝试过),这可能对这里有所帮助,但我的理解是该应用程序需要是一个 VOIP 应用程序。显然,我不想在我的应用程序上要求 VOIP 在收到推送通知时只执行代码。

谢谢。

您刚刚在描述中回答了您的问题。

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

    参见App Programming Guide for iOS

    In most cases, the system does not relaunch apps after they are force quit by the user. One exception is location apps, which in iOS 8 and later are relaunched after being force quit by the user. In other cases, though, the user must launch the app explicitly or reboot the device before the app can be launched automatically into the background by the system.

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

    参见Voice Over IP (VoIP) Best Practices

    Your app is automatically relaunched if it’s not running when a VoIP push is received.

  3. WhatsApp 中的两个blue 标记表示收件人已阅读消息。如果您收到两个 blue 标记,就在收到推送通知之后,这是 WhatsApp 中的设计错误或错误,因为您无法判断用户是否真的阅读了通知。如果您得到两个 grey 标记,则表示消息已发送到设备。同样,如果您收到两个 grey 标记,就在收到推送通知并且应用程序被强制退出之后,要么 WhatsApp 正在(错误地)使用 VoIP 推送,要么他们只是假设推送已发送或即将发送。