根据苹果指南:
“作为呈现的通知的结果,用户轻击警报的操作按钮或轻击(或单击)应用程序图标。如果(在运行iOS的设备上)轻击操作按钮,则系统启动应用程序,并且应用程序调用其代表的应用程序:didFinishLaunchingWithOptions:方法(如果已实现);它传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。
如果在运行iOS的设备上点击应用程序图标,应用程序将调用相同的方法,但不提供有关通知的信息。如果在运行Mac的计算机上单击应用程序图标,应用程序将调用代表的applicationDidFinishLaunching:方法,通过该方法,代表可以获得远程通知有效负载。
我的问题是,假设用户从供应商那里得到了3-4个推送通知,并且都存储在苹果的通知中心。如果用户点击通知警报,他/她可以很容易地在应用程序中获取通知数据。但是,如果用户在iPhone上点击应用程序图标,如何获取所有先前通知的相关数据。
提前感谢!
发布于 2012-07-02 17:11:35
您不能,您将只收到有关用于打开您的应用程序的通知的信息。
因此,如果用户打开你的应用程序,而你的应用程序有通知,你将无法从你的应用程序中检索它们。
一种变通办法可能是在服务器上跟踪通知,并在应用程序中处理。因此,服务器跟踪哪个通知已被读取。这就是Facebook如何做到这一点。
发布于 2015-09-26 17:27:47
要以正确的方式做到这一点,必须满足一些条件:
你的服务器知道你的应用程序当前看到了什么,以及它可以再次发送什么通知。
让我们只考虑远程通知。app有三种状态:
- notification appears without user's action:函数应用程序(应用程序: UIApplication,didReceiveRemoteNotification userInfo: NSObject : AnyObject) {//处理您的通知}
您可以使用第三方库:BSForegroundNotification显示横幅
- notification appears on the screen. _(Note that setting content-available=1 in a push notification can lead to the latest push message being visible once the app icon is pressed, as didReceive..._ _**is**_ _called)._//应用程序中未调用任何内容,但应用程序图标徽章更改//或者-如果通知包含字段content-available设置为1-函数应用程序(应用程序: UIApplication,didReceiveRemoteNotification userInfo: NSObject : AnyObject) {//处理您的通知}
-用户点击通知功能应用程序(应用程序: UIApplication,didReceiveRemoteNotification userInfo: NSObject : AnyObject) {//处理您的通知}-用户采取通知操作
func应用程序(application: UIApplication,handleActionWithIdentifier identifier: String?,forRemoteNotification userInfo: NSObject : AnyObject,completionHandler:() -> Void) {//处理您的通知的操作}
或
func应用程序(application: UIApplication,handleActionWithIdentifier identifier: String?,forRemoteNotification userInfo: NSObject : AnyObject,withResponseInfo responseInfo: NSObject : AnyObject,completionHandler:() -> Void) {//处理通知的操作响应信息}
-用户点击应用程序图标
func applicationDidBecomeActive(应用程序: UIApplication) {//从服务器获取挂起的通知}
在ALL上运行的
- notification appears on the screen. //应用程序中未调用任何内容,但应用程序图标徽章发生变化
-用户点击通知函数应用程序(应用程序: UIApplication,didFinishLaunchingWithOptions launchOptions: NSObject: AnyObject?) -> Bool { if let userInfo = launchOptions?UIApplicationLaunchOptionsRemoteNotificationKey as?NSObject: AnyObject {//处理您的通知}}
-用户采取通知操作
func应用程序(application: UIApplication,handleActionWithIdentifier identifier: String?,forRemoteNotification userInfo: NSObject : AnyObject,completionHandler:() -> Void) {//处理您的通知的操作}
或
func应用程序(application: UIApplication,handleActionWithIdentifier identifier: String?,forRemoteNotification userInfo: NSObject : AnyObject,withResponseInfo responseInfo: NSObject : AnyObject,completionHandler:() -> Void) {//处理通知的操作响应信息}
-用户点击应用程序图标
func applicationDidBecomeActive(应用程序: UIApplication) {//从服务器获取挂起的通知}
如何处理通知?
let notification = WLNotification(userInfo: userInfo)在WLNotification中,请记住在收到通知时保留当前的应用程序状态。将来,您可能需要它来了解通知来源。
WLNetworkClient.sharedClient().notificationForIdentifier(notification.identifier)从服务器获取有关该通知的详细信息,同时让它知道您确实收到了该通知,并对用户数据产生了影响。
如何获取所有挂起的通知?
WLNetworkClient.sharedClient().pendingNotificationsWithCompletionBlock(nil)获取您错过的所有通知。换句话说,获取那些在服务器中没有标记为您接收到的邮件。
阅读Limitations of Apple Push Notifications。
查看相关问题:
发布于 2015-03-04 00:18:37
我也遇到了同样的问题:如果用户点击推送横幅,他会得到应用中的推送信息,如果他点击了应用图标,他就不会得到推送的信息。您可以从它处理派生的一个,但有一些限制。例如,如果你想要一个来自推送的徽章编号,你可以这样做:(推送应用图标->应用图标badge -> your var)
在AppDelegate中
- (void)applicationWillEnterForeground:(UIApplication *)application
{
newMessages = application.applicationIconBadgeNumber;
}https://stackoverflow.com/questions/11290661
复制相似问题