检测应用程序是不是从后台 Swift iOS 打开

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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

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

【讨论】:

以上是关于检测应用程序是不是从后台 Swift iOS 打开的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HTML 和 JavaScript 检测 iOS 应用何时进入后台

Swift IOS:从通知打开应用程序时调用 UIviewController 的特定功能

如何检测应用程序何时在后台 Swift 中强制关闭 [重复]

如何使用 Swift 检测 iOS 应用程序何时出现在前台? [复制]

如何检测我的音频流 url 是不是无法被 iOS 设备播放 - swift3

检测从哪个 UILocalNotification 打开应用程序