我想知道诸如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视频多任务处理的新功能(来自WWDC 2013的#204)

  • 我也读过关于PushKit的信息(尽管我没有尝试过),这也许可以帮上忙,但是我的理解是该应用程序必须是VOIP应用程序。显然,我不想在收到推送通知时要求我的应用程序上的VOIP仅执行代码。

    谢谢。

    最佳答案

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

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

    参见App Programming Guide for iOS:

    在大多数情况下,强制使用后系统不会重新启动应用程序
    由用户退出。定位应用是一个例外,它在iOS 8和
    后来被用户强行退出后重新启动。其他
    但是,在这种情况下,用户必须明确启动应用程序或重新启动
    设备可以在应用自动启动之前
    系统的背景。
  • VoIP推送通知可以唤醒该应用程序,即使它已被强制退出。

    参见Voice Over IP (VoIP) Best Practices:

    如果您的应用在VoIP时未运行,则会自动重新启动
    收到推送。
  • WhatsApp中的两个蓝色标记表示,收件人已阅读邮件。如果在收到推送通知后收到两个蓝色标记,这是WhatsApp中的设计错误或错误,因为您无法分辨用户是否实际阅读了该通知。如果您得到两个灰色标记,则表示消息已传递到设备。同样,如果您收到两个灰色标记,则在收到推送通知且应用程序被强制退出后,WhatsApp为此(误)使用了VoIP推送,或者他们只是假定推送已交付或即将交付。
  • 07-26 09:37
    查看更多