【问题标题】:How to handle push notification when app is in background but not suspended当应用程序处于后台但未暂停时如何处理推送通知
【发布时间】:2015-06-19 08:00:07
【问题描述】:

我的应用收到推送通知,并为此显示适当的信息消息。但是,当我单击消息时,应用程序变为活动状态,但应用程序 didFinishLaunchingWithOptions 没有被调用,我认为这是正确的,因为应用程序没有暂停,它只是退出活动状态。问题是我如何确保当应用程序变为前台时用户点击消息?

【问题讨论】:

  • 第一个问题是查看按钮是什么意思,顺便说一句,如果您的应用程序处于后台模式并且您将点击通知横幅然后didReceiveRemoteNotification 将被调用
  • 当推送通知到来并且应用程序处于后台时,系统会在 iphone 顶部提示一个视图,并带有一些消息(来自通知有效负载)。但是,当我单击该视图时,应用程序变为活动状态,但没有调用 didFinishLaunchingWithOptions
  • didFinishLaunchingWithOptions 仅在您的应用未激活时调用。
  • 我知道,这就是我在这里提问的原因。因为实际上应用程序处于后台模式,用户只需点击消息即可从通知消息中打开它。
  • 这个问题肯定需要更多关注

标签: ios apple-push-notifications


【解决方案1】:

我认为您正在寻找的是这个应用程序委托方法:

- (void)application:(UIApplication *)application     
       didReceiveRemoteNotification:(NSDictionary *)userInfo

如果您的应用程序是后台的,它将被调用,并且通知负载将在 userInfo 字典中传递。这与应用程序从冷启动启动时的情况形成对比,当此方法被调用,而是在launchOptions字典中检查有效负载。

然而,自 iOS7 以来,首选的方法是使用这个:

- (void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo 
             fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;

当用户点击通知时调用此方法,无论应用程序是从冷启动启动还是从后台启动。因此,即使您不使用 completionHandler,它也提供了一种更一致的方式来访问通知负载。如果存在此方法,则不会调用较旧的方法。

【讨论】:

    【解决方案2】:

    如果我正确理解了这个问题,您是在问如何确保应用程序被带到前台作为用户“点击”的结果,即执行推送通知

    当应用程序根本没有运行时,您可以使用您提到的-application:didFinishLaunchingWithOptions:。 launchOptions 字典包含有效负载等——我不会描述这个,因为你已经知道它是如何工作的。

    但是,当应用程序正在运行时,不会调用该方法。相反,- application:didReceiveRemoteNotification: 被调用。顺便说一句,如果应用程序已经在前台或者如果它在后台并且用户“单击”推送通知横幅/警报以打开应用程序,则会调用此方法。不会以其他方式调用它:所以我相信这正是您正在寻找的。​​p>

    此方法提供的 userInfo 字典将包含通知数据,类似于 -application:didFinishLaunchingWithOptions: 用于更多的临时处理。 (注意:userInfolaunchOptions 在语义上是不同的,但希望这是显而易见的。:))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多