首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过不同的用户操作捕获所有iOS推送通知,包括轻触应用程序图标

如何通过不同的用户操作捕获所有iOS推送通知,包括轻触应用程序图标
EN

Stack Overflow用户
提问于 2012-07-02 17:03:35
回答 5查看 21.1K关注 0票数 26

根据苹果指南:

“作为呈现的通知的结果,用户轻击警报的操作按钮或轻击(或单击)应用程序图标。如果(在运行iOS的设备上)轻击操作按钮,则系统启动应用程序,并且应用程序调用其代表的应用程序:didFinishLaunchingWithOptions:方法(如果已实现);它传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。

如果在运行iOS的设备上点击应用程序图标,应用程序将调用相同的方法,但不提供有关通知的信息。如果在运行Mac的计算机上单击应用程序图标,应用程序将调用代表的applicationDidFinishLaunching:方法,通过该方法,代表可以获得远程通知有效负载。

我的问题是,假设用户从供应商那里得到了3-4个推送通知,并且都存储在苹果的通知中心。如果用户点击通知警报,他/她可以很容易地在应用程序中获取通知数据。但是,如果用户在iPhone上点击应用程序图标,如何获取所有先前通知的相关数据。

提前感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-02 17:11:35

您不能,您将只收到有关用于打开您的应用程序的通知的信息。

因此,如果用户打开你的应用程序,而你的应用程序有通知,你将无法从你的应用程序中检索它们。

一种变通办法可能是在服务器上跟踪通知,并在应用程序中处理。因此,服务器跟踪哪个通知已被读取。这就是Facebook如何做到这一点。

票数 40
EN

Stack Overflow用户

发布于 2015-09-26 17:27:47

要以正确的方式做到这一点,必须满足一些条件:

你的服务器知道你的应用程序当前看到了什么,以及它可以再次发送什么通知。

让我们只考虑远程通知。app有三种状态:

  • FOREGROUND

代码语言:javascript
复制
- notification appears without user's action:

函数应用程序(应用程序: UIApplication,didReceiveRemoteNotification userInfo: NSObject : AnyObject) {//处理您的通知}

您可以使用第三方库:BSForegroundNotification显示横幅

  • BACKGROUND

代码语言:javascript
复制
- 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上运行的

  • NOT

代码语言:javascript
复制
- 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) {//从服务器获取挂起的通知}

如何处理通知?

  1. let notification = WLNotification(userInfo: userInfo)

WLNotification中,请记住在收到通知时保留当前的应用程序状态。将来,您可能需要它来了解通知来源。

  1. WLNetworkClient.sharedClient().notificationForIdentifier(notification.identifier)

从服务器获取有关该通知的详细信息,同时让它知道您确实收到了该通知,并对用户数据产生了影响。

如何获取所有挂起的通知?

代码语言:javascript
复制
WLNetworkClient.sharedClient().pendingNotificationsWithCompletionBlock(nil)

获取您错过的所有通知。换句话说,获取那些在服务器中没有标记为您接收到的邮件。

阅读Limitations of Apple Push Notifications

查看相关问题:

票数 16
EN

Stack Overflow用户

发布于 2015-03-04 00:18:37

我也遇到了同样的问题:如果用户点击推送横幅,他会得到应用中的推送信息,如果他点击了应用图标,他就不会得到推送的信息。您可以从它处理派生的一个,但有一些限制。例如,如果你想要一个来自推送的徽章编号,你可以这样做:(推送应用图标->应用图标badge -> your var)

在AppDelegate中

代码语言:javascript
复制
- (void)applicationWillEnterForeground:(UIApplication *)application
{ 
    newMessages = application.applicationIconBadgeNumber;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11290661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档