我正在处理警报应用程序,我需要在特定时间安排警报,我使用scheduleLocalNotification
来安排警报,并且它可以正常工作。 但是我需要在触发警报之前运行到我的API服务器的请求。在该请求中,我想检查从API服务器返回的一些参数,如果满足某些条件。
如果任何人有一个在特定日期运行的方法 - 时间在swift中 请帮帮我
func addAlarm (newAlarm: Alarm) {
// Create persistent dictionary of data
var alarmDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(ALARMS_KEY) ?? Dictionary()
// Copy alarm object into persistent data
alarmDictionary[newAlarm.UUID] = newAlarm.toDictionary()
// Save or overwrite data
NSUserDefaults.standardUserDefaults().setObject(alarmDictionary, forKey: ALARMS_KEY)
scheduleNotification(newAlarm, category: "ALARM_CATEGORY")
scheduleNotification(newAlarm, category: "FOLLOWUP_CATEGORY")
}
/* NOTIFICATION FUNCTIONS */
func scheduleNotification (alarm: Alarm, category: String) {
let notification = UILocalNotification()
notification.category = category
notification.repeatInterval = NSCalendarUnit.Day
switch category {
case "ALARM_CATEGORY":
notification.userInfo = ["UUID": alarm.UUID]
notification.alertBody = "Time to wake up!"
notification.fireDate = alarm.wakeup
notification.timeZone = NSTimeZone.localTimeZone()
notification.soundName = "loud_alarm.caf"
break
case "FOLLOWUP_CATEGORY":
notification.userInfo = ["UUID": alarm.followupID]
notification.alertBody = "Did you arrive yet?"
notification.fireDate = alarm.arrival
notification.timeZone = NSTimeZone.localTimeZone()
notification.soundName = UILocalNotificationDefaultSoundName
break
default:
print("ERROR SCHEDULING NOTIFICATION")
return
}
print("Notification=\(notification)")
// For debugging purposes
if alarm.isActive {
UIApplication.sharedApplication().scheduleLocalNotification(notification)
}
}
答案 0 :(得分:2)
无法通过本地通知唤醒应用,这仅适用于远程通知。根据{{3}}:
当远程通知到达时,系统会处理用户 通常在应用程序处于后台时进行交互。它也是 将通知有效负载传递给 应用:didReceiveRemoteNotification:fetchCompletionHandler: iOS和tvOS中app委托的方法
但仍有一个问题;即便如此,根据didReceiveRemoteNotification:fetchCompletionHandler:
Notification Programming Guide,我们无法保证应用会启动:
但是,如果是用户,系统会不自动启动您的应用 强行退出。在这种情况下,用户必须重新启动您的应用 或在系统尝试启动您的应用程序之前重新启动设备 再次自动。
我认为没有一种保证可以在稍后的某个时刻安排执行块的方法,与当时应用程序的状态无关。根据您的具体要求和频率,您可以注册fetch
后台模式并实施application:performFetchWithCompletionHandler:
至documentation。最后一点:确保您是一个负责任的后台应用程序(根据我的经验,Apple认真对待此要求)