背景问题中的Apple推送通知

时间:2013-10-15 20:54:20

标签: ios objective-c apple-push-notifications

我正在使用parse.com作为我正在构建的测试应用的APN提供商。我已经确认推送通知正在运行,因为我已经能够在应用程序位于前台时成功接收警报。另外,我的plist中指定的remote-notification键的值为UIBackgroundModes

在我的应用中,我想在收到推送通知时将用户的当前位置数据发送回我的应用专用parse.com数据库。我实际上并不关心通知有效负载本身,因为通知只是获取一小段信息的一种方法。该应用程序不断在后台收集数据并将其存储在持久性NSDictionary

我已将位置发送代码放在application:didReceiveRemoteNotification:方法中。如果我的应用程序在收到通知时位于前台,则会调用该方法。如果我的应用程序在后台,则不会调用该方法。

  • 我做错了什么?
  • 当应用程序在后台并且用户没有与通知进行交互时,是否可以在application:didReceiveRemoteNotification:中执行API请求?**

编辑:即使我使用application:didReceiveRemoteNotification:fetchCompletionHandler:,问题仍然存在。

注意:我的NSDictionary充满了位置数据不为空。此外,我不是尝试在后台进行任何UI操作 - 只是尝试执行API请求。

4 个答案:

答案 0 :(得分:15)

检查以下内容:

  • 通知有效负载包括“content-available”
{"alert":"",
"badge":"0",
"content-available":"1",
"sound":""}

答案 1 :(得分:0)

documentation for UIApplicationDelegate -application:didReceiveRemoteNotification对此方法非常清楚:

  

如果在推送通知到达时应用程序未运行,则该方法   启动应用程序并提供相应的信息   启动选项字典。该应用程序不会调用此方法来处理   推送通知。相反,你的实施   application:willFinishLaunchingWithOptions:或   application:didFinishLaunchingWithOptions:方法需要得到   推送通知有效载荷数据并做出适当的响应。

您需要处理这两种方法中的通知,以便在应用处于后台和前台时进行响应。

答案 2 :(得分:0)

您可以尝试使用此代替

application:didReceiveRemoteNotification

方法,因为您需要在后台模式中获取推送,因此,当应用程序处于后台模式时,这将起作用。但是,当应用程序位于前台以显示您的消息时,您可能需要添加自定义通知或UIAlertView。希望它有所帮助,现在还为时不晚。

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

    NSLog(@"Remote Notification Received: %@", userInfo);

    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody = @"message to be displayed";
    notification.applicationIconBadgeNumber = 1;


    [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}

答案 3 :(得分:0)

亚历克斯的答案几乎为我工作。

确保content-available的值为1(数字),而不是字符串“1”:

{
  "alert":"",
  "content-available":1,
  "sound":""
}

badge参数是可选的。

(使用PDN服务器进行APN)