0

请问我有一个关于如何在特定时间触发本地通知的问题?没有用户触发它并且需要在特定时间触发本地通知的应用程序

以下是我的代码:

这是为了获得用户的许可

func registerLocal() {

    let center = UNUserNotificationCenter.current()

    center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
        if granted {
            print("Yay!")
        } else {
            print("D'oh")
        }
    }
}

// 这是我安排本地通知 func scheduleLocal() {

    let center = UNUserNotificationCenter.current()
    let content = UNMutableNotificationContent()
    content.title = "Late wake up call"
    content.body = "The early bird catches the worm, but the second mouse gets the cheese."
    content.categoryIdentifier = "alarm"
    content.userInfo = ["customData": "fizzbuzz"]
    content.sound = UNNotificationSound.default()



    var dateComponents = DateComponents()
    dateComponents.hour = 3
    dateComponents.minute = 19
    dateComponents.day = 3
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)

    let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
    center.add(request)
     center.removeAllPendingNotificationRequests()
}

// 她我称之为这些方法

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

            registerLocal()
            scheduleLocal()
         return true
  }

当我关闭我的应用程序时我没有收到通知,请帮助我如何在特定时间触发本地通知

谢谢

4

1 回答 1

1

添加通知后您不应该调用center.removeAllPendingNotificationRequests(),因为它也会取消之前添加的待处理通知。您应该在致电后检查center.addRequest(request)您的请求是否已被实际添加

center.getPendingNotificationRequests(completionHandler: { pendingRequest in
    print("Pending notifications: \(pendingRequest)")   //Just for debugging
})

或者你也可以指定一个完成处理程序addRequest,如果没有成功添加请求,它将返回一个错误:

center.add(request, withCompletionHandler: { error in
   print(error)
})
于 2017-08-03T13:30:39.400 回答