Apple推送通知 – 送货回执

我写了一个简单的消息系统,它允许以推送通知的forms从Web界面向设备发送简短消息。

在android上,一切顺利,一旦设备收到通知,将发送确认收据发送回服务器,然后读取确认。 显然,当应用程序在后台运行或手机处于睡眠状态时,通常会发送传送确认。

我为iOS编写了类似的应用程序。 我是多么惊讶该应用程序:当应用程序未激活时,不会调用didReceiveRemoteNotification!

当应用未激活时,是否真的无法在没有用户交互的情况下跟踪消息传递? 其他人建议在服务器上保留消息日志并在应用程序打开时发送消息,但这仍然需要用户交互。

有没有办法围绕苹果限制后台服务? 我可以以某种方式使我的应用程序使用声音或位置服务,以允许在后台进行简单的POST请求吗?

在iOS7中,您可以使用带有后台提取的推送通知,这是一个设置了content-available标志的远程通知。 示例有效负载:{aps:{content-available:1}}。 在这种情况下,iOS将唤醒您的应用程序(有一些限制请参阅: 如果用户强行退出, iOS会将我的应用程序启动到后台吗? )。

在您的应用程序被唤醒后,您有30秒的时间向服务器发送推送通知收据确认。 您还必须在目标后台模式中启用“后台获取”function,并更新AppDelegate以包含此方法:

- (void)application: (UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler: (void (^)(UIBackgroundFetchResult))completionHandler 

所以这需要你身边的一些工作。

我希望这有帮助。

误用后台服务是让您的应用被拒绝的好方法。 Apple对应用程序在后台可以执行的操作非常严格。

作为用户,如果我发现我安装的应用程序在后台没有充分理由进行Web请求,它将被迅速删除!

推送通知是一种单向消息 – 无法保证通知甚至已经发送,更不用说读取了。 我建议你在这里阅读APNS。

http://cydia.saurik.com/package/backgrounder

检查一下,对于源,请单击Developers Page。

如果它不是苹果的方式,就没有办法了。

这就是越狱的地方。你可能必须使你的应用程序越狱兼容并利用更多的力量。

我会说你想要的是什么,制作一个新版本的Backgrounder,以你需要的方式工作。

当应用程序未处于活动状态应用程序时:将不会调用didReceiveRemoteNotification方法。

如果要在应用程序未处于活动状态时跟踪通知信息,请按照以下步骤操作。

应用程序didFinishLaunchingWithOptions:每次打开应用程序时都会调用该方法

从这个方法我们得到名为launchOptions的NSDictionary对象。 从这个launchOptions字典中,我们将以关键字UIApplicationLaunchOptionsRemoteNotificationKey的字典forms获取通知数据

从下面找到代码:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ NSDictionary *remoteNotify = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; //Accept push notification when app is not open if (remoteNotify) // it is only true when you get the notification{ // use the remoteNotify dictionary for notification data}} 

对于iOS,没有任何直接的方式提供有关实际交付的任何信息,但我找到了一个我尝试过的解决方法,它运行正常。

使用“通知服务扩展”,这主要用于提供丰富的通知,因此它基本上会在新推送到来时唤醒我们的应用程序,并提供大约30秒的时间执行我们的任务,例如下载图像以显示在通知中。 我们可以使用此应用程序唤醒function来调用我们的后端。

因此,使用有效负载发送一些唯一ID,并通过此方法使用推送ID调用后端服务器,这样您就可以确保将推送通知传送到设备中。

这将适用于应用程序的所有状态,即使在被杀死的状态下,所以这是完全certificate,我们可以依赖此变通方法来获取交付信息。

参考链接: https : //developer.apple.com/documentation/usernotifications/unnotificationserviceextension