【问题标题】:Detect if app is opened from Background Swift iOS检测应用程序是否从后台 Swift iOS 打开
【发布时间】:2017-02-06 14:09:00
【问题描述】:

我需要知道我的应用是通过与推送通知交互还是通过用户手动点击应用而被带到前台。

如果你从后台手动打开一个应用“applicationWillEnterForeground”会被调用。 如果您通过推送通知从后台打开应用,则会调用 "applicationWillEnterForeground",然后调用 "didReceiveRemoteNotification"

现在我想在应用程序委托内向我的后端发出一个 alamofire 请求,只要我确定它是否由于推送而打开(统计信息,用户是否与我们的推送消息交互)。

有没有在我列出的所有方法之后调用的方法?如果是这样,我可以在那个地方检查它是否是推送并将其发送出去。还是有更好的方法来解决这个问题?

【问题讨论】:

    标签: ios swift apple-push-notifications appdelegate uiapplicationdelegate


    【解决方案1】:

    当应用在后台时,您可以通过"didReceiveRemoteNotification"处理通知。

    如果它根本没有运行并且用户通过单击通知横幅启动它,您必须检查启动选项:

        if let launchOptions = launchOptions {
            if let notificationInfo = launchOptions[UIApplicationLaunchOptionsKey.remoteNotification] as? [AnyHashable : Any] {
                // Handle notificationInfo
            }
        }
    

    在 AppDelegate 中的方法 "application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)"中。

    【讨论】:

    • 好的,看看。我有一个需要调用的rest-api。 OpenedViaPush() 或 OpenedManually()。您显示的代码我已经使用它来检查应用程序的冷启动。现在该应用程序处于后台并重新打开。您确实可以检查 didReceiveRemoteNotification。但是如果您想跟踪它是否也手动从后台打开,它不起作用,因为调用了 2 个方法。 applicationWillEnterForeground,然后是 didReceiveRemoteNotification。
    • 对于应用程序在后台的场景,您不必关心 applicationWillEnterForeground 方法。只需在 didReceiveRemoteNotification 中实现您需要的内容。也许this thread 会有所帮助。
    • 如果您没有收到远程通知而只是从后台打开了应用程序? didReceiveRemoteNotification 仅在您收到通知时调用。我需要一种方法来做到这两点。
    【解决方案2】:

    找到了之后调用的东西:

    func applicationDidBecomeActive(_ application: UIApplication)
    

    在这里我可以将请求发送到我的后端,使用过

    didReceiveRemoteNotification
    

    在确定它是否通过推送打开之前。

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多