mocode10
mocode10

Reputation: 598

Mass local notifications swift 3

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

Answers (1)

Hiren
Hiren

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

Related Questions