Reputation: 598
I have an array of dictionaries. The dictionaries contain names/longitude/and latitude for different bars.
I want to create location based notifications for each bar in my app.
Here is the function I'm using, but for some reason it only creates a notification for the first bar in the list. The rest do not work.
Any idea what is wrong with this? I'm not sure what content.badge is for.
// Register location based notifications for all bars
func setupNotifications(){
if(CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways || CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse){
for i in 0...(allBars.count - 1){
let lat = (allBars[i])["Latitude"] as? Double
let long = (allBars[i])["Longitude"] as? Double
let name = (allBars[i])["Name"] as! String
let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: lat!, longitude: long!), radius: 60, identifier: "\(name)")
region.notifyOnEntry = true
region.notifyOnExit = false
let trigger = UNLocationNotificationTrigger(region: region, repeats: true)
let content = UNMutableNotificationContent()
content.title = "Rate \(name) in the app!"
content.badge = 1
content.sound = UNNotificationSound.default()
let request = UNNotificationRequest(identifier: "LN\(name)", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) {(error) in
if let error = error{
print("Need notification permissions... \(error)")
}
else{
//success
}
}
}
}
}
Upvotes: 1
Views: 127
Reputation: 270
import UserNotifications
class ViewController: UIViewController,UNUserNotificationCenterDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
print("UNUserNotificationCenter")
UNUserNotificationCenter.current().requestAuthorization(options: [.sound,.alert,.badge], completionHandler: { didallow, error in
})
}
@IBAction func btn(_ sender: UIButton) {
let content = UNMutableNotificationContent()
content.title = "the 5 sec are up"
content.subtitle = "they are up now"
content.body = "the 5 sec are realy up now"
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5.0, repeats: false)
let request = UNNotificationRequest(identifier: "time done", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
print("Handle push for foreground")
print("\(notification.request.content.userInfo)")
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("Handle push for background or close")
print("\(response.notification.request.content.userInfo)")
completionHandler()
}
Upvotes: 1