如果应用程序已在后台运行,如何响应推送通知视图

rus*_*elf 45 multitasking apple-push-notifications ios

我有一些相当简单的事我想做.我将一个自定义数据附加到我处理的一些推送通知中

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)

我寻找UIApplicationLaunchOptionsRemoteNotificationKey,并且它就是它.

如果我的应用程序是第一次启动,则只会调用该方法.如果我的应用程序在通知进入后已经在后台运行并且用户按下通知上的"查看"按钮,我该如何读取相同的密钥?我想将它们发送到特定的视图控制器,并在其上打开该数据,就像我第一次从通知中启动应用程序时一样.

ger*_*ry3 108

application:didReceiveRemoteNotification:fetchCompletionHandler:在iOS 7及更高版本中查看.


application:didReceiveRemoteNotification:如果您的应用程序在前台运行,则会调用此方法.如果您的应用程序在后台运行并且用户参与您的推送通知(从而使您的应用程序处于活动状态),也会调用它.

因此,真正的问题是如何确定应用程序是否位于前台,或者如果用户使用您的推送通知使其处于活动状态.

它看起来像这样的回答这个问题didReceiveRemoteNotification当后台有钥匙:

您可以application:didReceiveRemoteNotification:使用这段代码判断您的应用是否刚刚被带到前台:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if ( application.applicationState == UIApplicationStateActive )
        // app was already in the foreground
    else
        // app was just brought from background to foreground
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 如果应用程序在后台运行,则说"应用程序:didReceiveRemoteNotification"方法被调用并不是很准确.更准确:如果应用程序是后台运行的,则只有在用户使用推送通知将其带到前台后才会调用该方法.如果用户取消/取消推送通知,则不会调用委托方法. (13认同)
  • 在iOS 7中,使用`remote-notification`后台模式,我认为这种技术不再适用,因为应用程序可以在后台处理远程通知而无需将其带到前台.那么你怎么知道它是从背景带到前景呢? (4认同)
  • 当设备获得通知(解锁)时会调用didRecieveRemoteNotification,并且当用户单击通知视图时,很难(据我所知)确定用户是否实际点击了通知或应用程序刚收到通知.并且检查应用程序状态除了状态之外不会告诉您任何内容,而不是用户单击通知(根据我的经验). (2认同)