我正在使用parse.com作为我正在构建的测试应用的APN提供商。我已经确认推送通知正在运行,因为我已经能够在应用程序位于前台时成功接收警报。另外,我的plist中指定的remote-notification
键的值为UIBackgroundModes
。
在我的应用中,我想在收到推送通知时将用户的当前位置数据发送回我的应用专用parse.com数据库。我实际上并不关心通知有效负载本身,因为通知只是获取一小段信息的一种方法。该应用程序不断在后台收集数据并将其存储在持久性NSDictionary
。
我已将位置发送代码放在application:didReceiveRemoteNotification:
方法中。如果我的应用程序在收到通知时位于前台,则会调用该方法。如果我的应用程序在后台,则不会调用该方法。
application:didReceiveRemoteNotification:
中执行API请求?** 编辑:即使我使用application:didReceiveRemoteNotification:fetchCompletionHandler:
,问题仍然存在。
注意:我的NSDictionary充满了位置数据不为空。此外,我不是尝试在后台进行任何UI操作 - 只是尝试执行API请求。
答案 0 :(得分:15)
检查以下内容:
{"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)