收到通知后,我如何在应用程序图标点击时获得消息?
Posted
技术标签:
【中文标题】收到通知后,我如何在应用程序图标点击时获得消息?【英文标题】:After Receiving Notification how can i get message on app icon click? 【发布时间】:2014-06-27 10:17:48 【问题描述】:我的推送通知工作正常,但在我的应用程序中,推送通知带有两条不同的消息:一条是“任务已完成”,第二条是“您有一条消息”。
现在当应用程序处于后台状态并且通知到达时,我如何在单击应用程序图标时获得通知消息?
如果有人知道,请帮助我。提前谢谢你。
【问题讨论】:
到目前为止你做了什么? 点击应用图标时尝试获取有效负载数据。 请检查以下问题的答案链接 - ***.com/a/5456271/900024 @PratikMistry:我检查了这个链接,但它不会帮助我们解决这个问题。我的问题是当我的应用程序在后台并且通知到来时调用哪个方法。 如果用户没有点击通知打开应用程序,则不会调用任何方法,但如果用户在您的应用程序处于后台时点击通知,则会调用 didReceiveRemoteNotification: 方法,您可以在其中检查应用程序。 applicationState 确定应用程序是否来自后台。 【参考方案1】:对于 ios 7 及更高版本,您可以使用:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
这将允许您在应用程序处于后台状态时进行快速处理。
【讨论】:
感谢重播,didReceiveRemoteNotification 方法仅在应用处于前台时调用,但我想在应用处于后台时获取有效负载的数据。 您没有正确阅读。这是一个带有 fetchCompletionHandler 的 iOS 7 方法……它与旧的 didReceieveRemoteNotification 方法不同。 好的......现在我没有任何设备进行测试,但让我知道一件事是当收到推送通知并且我的应用程序在后台时调用此方法? 是的,我就是这么说的。这会被调用,您可以进行一些处理,然后调用完成处理程序。阅读文档。 如果您单击应用程序图标,则不会调用带有 completionHandler 的 didReceiveRemoteNotification。如果您的应用程序已关闭并且您单击应用程序图标,它仍然不会被调用。我已经用我的 iPhone6 设备对此进行了测试。我读过的所有内容都表明,如果用户单击应用程序图标,您将无法收到推送通知。【参考方案2】:实际上,从 iOS 7 开始,您可以获取它。
您需要实现后台远程通知。
在你的 info.plist 文件中,你需要添加:
然后,在您的推送通知中,添加到有效负载 'content-available': 1,
然后,在 AppDelegate.m 中实现(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
方法。
参见参考:http://developer.xamarin.com/guides/cross-platform/application_fundamentals/backgrounding/part_3_ios_backgrounding_techniques/updating_an_application_in_the_background/
我已经在我的 iPhone 设备上进行了测试,它可以工作! =)
祝你好运!
【讨论】:
【参考方案3】:通知数据在application:didReceiveRemoteNotification:
中传送到您的应用程序。如果你想在applicationDidBecomeActive:
中处理它,你应该将它存储在application:didReceiveRemoteNotification:
并在applicationDidBecomeActive.
中再次读取它
请查看link
【讨论】:
我在头文件中声明了一个字符串变量,我在 didReceiveRemoteNotification 中设置了它的值,并在 applicationDidBecomeActive 中打印了这个变量,但值没有被打印出来。我认为当应用程序处于后台状态时没有调用 didReceiveRemoteNotification。跨度> 我认为你是对的。因为我也试过这个 Bandish。而且它根本不打印任何值。你有没有想过如何做到这一点?【参考方案4】:收到推送通知后..当您单击应用程序图标时,将调用以下方法...UserInfo(字典)是来自APNS的有效负载
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
NSLog(@"Message from APNS%@", userInfo);
NSLog(@"APS from APNS%@", userInfo[@"aps"]);
NSLog(@"ID from APNS%@", userInfo[@"id"]);
在上面的日志中查看 userInfo 字典给出的内容并尝试从中检索值..
如果应用程序处于前台模式,则它会通过application:didReceiveRemoteNotification:
接收推送通知
但如果应用程序未处于前台模式,则推送通知将传递给application:didFinishLaunchingWithOptions:
希望对你有帮助...
【讨论】:
感谢重播,didReceiveRemoteNotification 方法仅在应用处于前台时调用,但我想在应用处于后台时获取有效负载的数据。以上是关于收到通知后,我如何在应用程序图标点击时获得消息?的主要内容,如果未能解决你的问题,请参考以下文章