8

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

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

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

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

编辑:即使我使用application:didReceiveRemoteNotification:fetchCompletionHandler:.

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

4

4 回答 4

16

检查以下内容:

  • 通知有效负载包括“内容可用”
{"alert":"",
"badge":"0",
"content-available":"1",
"sound":""}
于 2013-10-16T12:29:36.367 回答
0

UIApplicationDelegate -application:didReceiveRemoteNotification的文档对此方法非常清楚:

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

您需要在这两种方法中处理通知,以便能够在您的应用程序处于后台和前台时做出响应。

于 2013-10-15T21:00:06.043 回答
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);

}
于 2014-06-18T06:22:29.660 回答
0

Alex L 的回答几乎对我有用。

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

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

badge参数是可选的。

(为 APN 使用 Parse Server)

于 2016-10-28T03:47:02.530 回答