Apple推送通知 - 送货回执

时间:2013-03-07 20:28:31

标签: ios background push-notification

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

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

我为iOS编写了类似的应用程序。我对该应用程序感到惊讶:当应用程序未处于活动状态时,不会调用didReceiveRemoteNotification!

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

苹果对后台服务有限制吗?我可以以某种方式让我的应用程序使用声音或位置服务,以便在后台允许简单的POST请求吗?

5 个答案:

答案 0 :(得分:3)

在iOS7中,您可以使用带背景提取的推送通知,这是一个设置了content-available标志的远程通知。示例有效负载:{aps:{content-available:1}}。 在这种情况下,iOS会唤醒您的应用程序(有一些限制请参阅:Will iOS launch my app into the background if it was force-quit by the user?)。

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

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

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

我希望这会有所帮助。

答案 1 :(得分:1)

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

作为一名用户,如果我发现我安装的应用程序在后台没有充分理由提出网络请求,则会很快删除!

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

答案 2 :(得分:0)

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

检查出来,对于源,点击开发者页面。

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

这就是越狱的地方。你可能需要让你的应用程序越狱兼容并充分利用更多的力量。

我会说出你想要的东西,制作一个新版本的Backgrounder,以你需要的方式工作。

答案 3 :(得分:0)

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

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

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

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

从下面找到代码:

 - (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}}

答案 4 :(得分:-1)

对于iOS,没有任何直接的方法可以提供有关实际交付的任何信息,但是我发现了我尝试过的一种变通方法,并且工作正常。

使用“ Notification service extension”(通知服务扩展),其主要用途是提供丰富的通知,因此,只要有新的推送,它就可以唤醒我们的应用程序,并在大约30秒的时间内执行我们的任务,例如下载要在通知中显示的图片。我们可以使用此应用唤醒功能来调用我们的后端。

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

这将适用于应用程序的所有状态,即使处于已终止状态也是如此,因此这是充分的证据,我们可以依靠此替代方法来获取交付信息。

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