简体   繁体   中英

Actions buttons not showing up in local notifications ios 9.2 swift 2

I am creating notifications in a loop, relevant code is:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    appDelegate = self

    serNotificationType = UIUserNotificationType.Alert.union(UIUserNotificationType.Sound).union(UIUserNotificationType.Badge)

    let completeAction = UIMutableUserNotificationAction()
    completeAction.identifier = "COMPLETE" // the unique identifier for this action
    completeAction.title = "Clear" // title for the action button
    completeAction.activationMode = .Background // UIUserNotificationActivationMode.Background - don't bring app to foreground
    completeAction.authenticationRequired = false // don't require unlocking before performing action
    completeAction.destructive = true // display action in red

    let callInAction = UIMutableUserNotificationAction()
    callInAction.identifier = "CALLIN"
    callInAction.title = "Call now"
    callInAction.destructive = false
    callInAction.authenticationRequired = false
    callInAction.activationMode = UIUserNotificationActivationMode.Background

    callInAction.destructive = false

    let notificationCategory = UIMutableUserNotificationCategory() // notification categories allow us to create groups of actions that we can associate with a notification
    notificationCategory.identifier = "CALLINNOTIFICATION"
    notificationCategory.setActions([callInAction, completeAction], forContext: .Default) //UIUserNotificationActionContext.Default (4 actions max)
    notificationCategory.setActions([completeAction, callInAction], forContext: .Minimal) //UIUserNotificationActionContext.Minimal - for when space is limited (2 actions max)
    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: notificationTypes, categories: NSSet(array:[notificationCategory]) as? Set<UIUserNotificationCategory>))

    return true
}

Scheduling of the notifications is done in the for loop (and maybe this is the reason something is wrong with scheduling):

func scheduleLocalNotifications() {

    let arrayOfEvents: [[Meeting]] = CalendarController.sharedInstance.getAllMeetings()

    //remove CallIn notifications anyway
    self.removeScheduledNotifications()

        var limitCounter = 0  //limit is 64 local notifications

        print("scheduling start: \(CallIn.Settings.notifyNumberOfMinutesBeforeEvent)")
        for var x = 0; x < arrayOfEvents.count; x++ {

        for var y = 0; y < arrayOfEvents[x].count; y++ {
            let event = arrayOfEvents[x][y]

            if(event.startTime.timeIntervalSinceDate(NSDate()) > -2000 && limitCounter <= 64){
                if(notificationsAreAllowed()){
                    let notification = UILocalNotification()
                    let minutesBefore = CallIn.Settings.notifyNumberOfMinutesBeforeEvent
                    notification.fireDate = event.startTime.dateByAddingTimeInterval(-minutesBefore * 60) //time of launch of notification

                    if(minutesBefore <= 1){
                        notification.alertBody = "Your \(event.title) is about to start"
                    }else{
                        notification.alertBody = "You have \(event.title) in \(Int(minutesBefore)) minutes"
                    }
                    notification.alertAction = "OK"
                    notification.soundName = UILocalNotificationDefaultSoundName
                    notification.userInfo = ["title": event.title, "UUID": event.UUID, "CallIn": "CallInNotification"]
                    notification.category = "CALLINNOTIFICATION"
                    notification.applicationIconBadgeNumber = 1

                    UIApplication.sharedApplication().scheduleLocalNotification(notification)
                }

                limitCounter += 1
            }
        }
    }
}

The buttons Call now, and Dismiss are not showing up. What I want is this: 在此处输入图片说明

What I get is this: 在此处输入图片说明

Ok, I found the problem and this may be useful for someone in the future:

I had

UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings)

was called twice in two different places in the application (because I had setting in the application, and needed to alter it from settings page). So when refactored, and called it once, it worked.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM