当前位置: 首页 > 知识库问答 >
问题:

如何通过不同的用户操作(包括点击应用图标)捕获所有iOS推送通知

东方英豪
2023-03-14

根据苹果指南:

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

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

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

提前谢谢!

共有3个答案

林俊英
2023-03-14

我也遇到了同样的问题:如果用户点击推送横幅,他会得到推送应用程序的信息,如果他点击应用程序图标,他不会得到它。你可以处理它的导数,但有一些限制。例如,如果你想从push中获得一个徽章号码,你可以这样做:(push)-

在应用代表

- (void)applicationWillEnterForeground:(UIApplication *)application
{ 
    newMessages = application.applicationIconBadgeNumber;
}
秦钟展
2023-03-14

要以正确的方式进行,必须满足以下条件:

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

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

>

>

  • 出现通知,但不显示用户的操作:

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
        //handle your notification
    }
    

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

    出身背景

    >

  • 通知出现在屏幕上。(请注意,在消息推送中设置content-可用性=1可能会导致在按下应用程序图标后显示最新的推送消息,因为调用了didReception...)。

    //nothing is called in the app, but app icon badge changes
    // OR - if the notification contains the field content-available set to 1 - 
    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
        //handle your notification
    } 
    

    用户点击通知

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
        //handle your notification
    }           
    

    用户执行通知操作

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], completionHandler: () -> Void) {
         //handle your notification's action
    }
    

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) {
         //handle your notification's action response info
    }
    

    用户点击应用程序图标

    func applicationDidBecomeActive(application: UIApplication) {
        //fetch pending notifications from server
    }
    

    根本不跑

    >

  • 通知出现在屏幕上。

    //nothing is called in the app, but app icon badge changes
    

    用户点击通知

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        if let userInfo = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject: AnyObject] {
            //handle your notification
        }
    }
    

    用户执行通知操作

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], completionHandler: () -> Void) {
         //handle your notification's action
    }
    

    func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forRemoteNotification userInfo: [NSObject : AnyObject], withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) {
         //handle your notification's action response info
    }
    

    用户点击应用程序图标

    func applicationDidBecomeActive(application: UIApplication) {
        //fetch pending notifications from server
    }
    

    如何处理通知?

    >

  • let notification=WLNotification(userInfo:userInfo)

    WLNotify中,请记住在收到通知时保持当前应用程序状态。将来您可能需要它来知道该通知来自哪里。

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

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

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

    WLNetworkClient.sharedClient().pendingNotificationsWithCompletionBlock(nil)
    

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

    阅读Apple推送通知的限制。

    请参阅相关问题:

    • 如何确保iOS应用程序收到服务器发送的每个推送通知

  • 颛孙国源
    2023-03-14

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

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

    一种解决方法是跟踪服务器上的通知并在应用程序中处理。因此,服务器会跟踪已阅读的通知。这就是Facebook的做法。

     类似资料:
    • 问题内容: 根据Apple指南: “作为呈现的通知的结果,用户点击警报的操作按钮或点击(或单击)应用程序图标。如果在运行iOS的设备上轻按了操作按钮,则系统将启动该应用程序,调用其委托的application:didFinishLaunchingWithOptions:方法(如果已实现);它将传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。 如果在运行iOS的设备上点击了应用程序图

    • 让我的应用程序收到5个远程通知。每当我点击单个通知时,所有5个通知都消失了,我们需要完整地显示其他4个通知,直到它们点击。但主要问题是所有其他通知都是为了其他目的,而不是为了相同的目的。因此,我们需要显示所有通知,直到从通知托盘中单击它们。 我们还需要根据此更新徽章计数。有什么方法来处理远程消息推送时,应用程序不运行(被杀)?您能否建议使用目标c处理远程推送通知的更好方法? 谢啦

    • 根据《本地和远程通知编程指南》,当发送远程通知并点击SpringBoard中的应用程序图标时: 用户点击警报中的默认按钮或点击(或单击)应用程序图标。如果点击默认操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其代理的应用程序:didFinishLaunchingWithOptions:method,传入通知负载(用于远程通知)或本地通知对象(用于本地通知)。 如果通知是远程的

    • 在我的应用程序中,我使用firebase推送通知。我想为所有版本的设备(如Whatsapp)显示应用图标徽章(应用图标上的点), 在Android8中,徽章仅通过打开设置(在手机中)显示- 默认情况下,我需要打开此设置

    • 我正在使用Delphi XE7。我有一个Android移动应用程序,接收推送通知。有时,我有十个或更多的顶栏推送图标通知。当用户只点击一个通知图标时,我想让所有通知显示到我的应用程序中。 我执行了下一个过程来捕获所有这些消息,但不起作用,因为它只捕获单击的推送消息。 有人能帮我解决这个问题吗? 问候,路易斯

    • 我正在xamarion IOS中构建一个消息应用程序。我的问题是 应用程序在后台,远程通知出现。现在用户可以通过单击应用程序图标和通知图标来打开应用程序。应用程序调用在收到通知和用户点击通知时进行了接收远程通知。在这两种情况下,应用程序状态都是后台。当用户点击通知时,我需要打开与通知相关的屏幕,当用户在主屏幕上点击应用程序图标时,我需要打开默认屏幕。 我无法识别该应用程序是通过录制远程通知还是通过