如果第一个通知在 swift 中被忽略,则安排第二个通知(或者如果通知被忽略,则完成任何操作)

Posted

技术标签:

【中文标题】如果第一个通知在 swift 中被忽略,则安排第二个通知(或者如果通知被忽略,则完成任何操作)【英文标题】:Scheduling a second notification if first is ignored in swift (or completing any action if notification is ignored) 【发布时间】:2016-01-12 14:51:11 【问题描述】:

因此,我目前在应用商店中有一款应用,它会提前安排 10 条通知,假设您错过了一条,您仍然会获得第二次或十次机会。现在,在您认为我会打扰此人之前,通知对于应用程序的功能非常重要,并且确实是主要目的。该应用程序是为 ios 7 构建的,因此当时没有“handleActionWithIdentifier”,据我了解,即使根据用户对通知的响应而关闭应用程序,它也可以完成应用程序的操作。此更新对应用程序非常有帮助,因为它消除了我必须打开应用程序才能响应通知的部分问题(通知会向用户提出问题,并根据答案完成某些事情)。

剩下的问题是检测是否错过了通知,如果通知被取消或忽略,我将如何让另一个通知出现,例如第二天。我已经在谷歌和堆栈溢出上搜索了这个,据我了解,所有以前的问题都在询问如何检测通知是否错过了一个我不需要的应用程序打开。

此时,如果用户通过按下通知上的选项之一来响应通知,我可以正确运行代码:

func application(application: UIApplication, handleActionWithIdentifier identifier: String?, forLocalNotification notification: UILocalNotification, withResponseInfo responseInfo: [NSObject : AnyObject], completionHandler: () -> Void) 
        var userInfo = [NSObject: AnyObject]()
        userInfo["text"] = responseInfo[UIUserNotificationActionResponseTypedTextKey]
        NSNotificationCenter.defaultCenter().postNotificationName("text", object: nil, userInfo: userInfo)

        print(userInfo)

        completionHandler()
    

截至目前,我只是接受文本字段输入并打印它,但如果我愿意,我可以启动第二个通知。有没有一种方法可以检测何时错过通知并安排另一个通知?

总是有可能仍然无法做我想做的事,我只会提前安排 10 条通知,这看起来很草率,并且不允许我做出迭代的响应。

TLDR;如果在不打开应用程序的情况下错过本地通知,我如何检测和运行代码

顺便说一句:如果你有答案,swift 是首选语言

【问题讨论】:

你能告诉我你采取了什么方法(步骤)来解决这个问题吗?即使我一直在经历这个问题。 【参考方案1】:

您可以混合使用Background Fetch某种时间戳测试

例如:

当您安排通知时,您可以保留一些逻辑,以便您跟踪通知是否被忽略。也许在NSUserDefaultsholding 中保留一些数据,这是最后一次发送通知何时应该由操作系统启动

一种方法是检查那个时间戳

如果您在它应该启动的那一刻之后启动此测试(可能有点晚,以防用户看到它但仍未准备好回答)并且您没有'仍未将其标记为未忽略,则用户可能已忽略或错过了您的通知。

这个测试应该可以在你的 AppDelegate 中使用。

然后,在Background Modes启用Background Fetch功能。

这将为您的应用程序提供一些 CPU 时间(当 iOS 认为 时间到了),你可以抓住机会;-)。

为了能够做到这一点,您需要在 AppDelegate 实现中添加适当的功能:

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 
       // your code
    

在此函数的主体中,运行您的“忽略通知测试”,并在需要时安排新通知。

完成测试后别忘了致电completionHandler

【讨论】:

我认为这会起作用,我唯一遇到的麻烦是告诉设备何时进行“检查”。例如,我如何要求设备在 10 分钟左右检查错过的通知。我对控制提取工作的频率或方式有点困惑。 欢迎来到 iOS 世界! :D 这由系统决定,你可以告诉它你想多久做一次。但是不能保证它会在那个时候进行后台提取。据我所知,唯一的选择是依赖这种机制,或者反过来:安排多个通知并在用户进入您的应用时删除待处理的通知。 是的,我认为这是我唯一的选择,所以我决定将两者结合起来。我提前安排了几个通知,然后如果他们错过了安排更多通知,那么它最终会更可靠一些。感谢您的回答!

以上是关于如果第一个通知在 swift 中被忽略,则安排第二个通知(或者如果通知被忽略,则完成任何操作)的主要内容,如果未能解决你的问题,请参考以下文章

弹性容器最小高度在 IE 中被忽略

如果在 iOS 设置中禁用通知访问时安排本地通知,则不会在 iOS 13 上触发本地通知

Swift:从手表取消本地通知(安排在手机上)

在安排中编号花盆

iOS - 安排多个本地通知,UNCalenderNotificationTrigger

清除以前的世博推送通知