当应用程序进入前台时检测远程通知

Posted

技术标签:

【中文标题】当应用程序进入前台时检测远程通知【英文标题】:Detect Remote Notifications when application enters foreground 【发布时间】:2016-06-13 09:20:12 【问题描述】:

美好的一天, 我有一个关于在 ios 上接收远程通知的问题,我知道当应用程序正在运行或应用程序未运行并且用户点击通知时会调用 n-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

但是,如果用户忽略了锁屏中的通知徽章并解锁了iPhone,然后你运行应用程序,那么该函数将不会被调用,那么我怎样才能收到收到的通知!

谢谢你:)

【问题讨论】:

你做不到。 如果通知还在通知中心,那么你会在 didFinishLaunching 方法中得到它 您应该创建一种方法来查询服务器以查看它是否有待处理的通知 @SaurabhPrajapati,这是错误的。即使您是正确的,它也对应用程序已经运行的实例没有帮助。 最好的办法是发送静默推送通知,然后在需要时生成相应的本地通知 【参考方案1】:

当手机被锁定时,应用程序被操作系统发送到非活动状态。 因此,在此期间收到的通知与应用在后台时收到的通知一样好。 就像在后台收到的任何通知一样,除非用户点击托盘中的通知,否则应用将无法获得控制权。

【讨论】:

【参考方案2】:

如果您忽略来自通知中心的通知,那么您将无法在应用程序中获取它。

【讨论】:

【参考方案3】:

你可以使用下面的代码来做到这一点

 NSDictionary *pushNotificationPayload = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    if(pushNotificationPayload)
    
        [self application:application didReceiveRemoteNotification:pushNotificationPayload];
    

【讨论】:

【参考方案4】:

对于任何条件,检查用户是否已点击,或者应用程序是否处于后台或处于活动状态。 您只需要在

中检查应用程序状态
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

    if(application.applicationState == UIApplicationStateActive) 

        //app is currently active, can update badges count here

    else if(application.applicationState == UIApplicationStateBackground)

        //app is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here

    else if(application.applicationState == UIApplicationStateInactive)

        //app is transitioning from background to foreground (user taps notification), do what you need when user taps here

    

【讨论】:

以上是关于当应用程序进入前台时检测远程通知的主要内容,如果未能解决你的问题,请参考以下文章

远程推送通知

缓存所有远程通知 - iOS

远程通知音量级别与应用程序中播放的声音不同

应用程序未运行时处理远程通知时崩溃

应用程序未运行时的 iOS 10 远程通知

应用完全关闭时获取 FCM 远程通知 iOS