Comment gérer UserNotifications Action B. iOS 10

Ainsi, je peux planifier des notifications comme suit;


//iOS 10 Notification
if #available/iOS 10.0, */ {

var displayDate: String {
let dateFormatter = DateFormatter//
dateFormatter.dateStyle = DateFormatter.Style.full
return dateFormatter.string/from: datePicker.date as Date/
}
let notif = UNMutableNotificationContent//


notif.title = "I am a Reminder"
notif.subtitle = "\/displayDate/"
notif.body = "Here's the body of the notification"
notif.sound = UNNotificationSound.default//
notif.categoryIdentifier = "reminderNotification"

let today = NSDate//
let interval = datePicker.date.timeIntervalSince/today as Date/

let notifTrigger = UNTimeIntervalNotificationTrigger/timeInterval: interval, repeats: false/

let request = UNNotificationRequest/identifier: "reminderNotif", content: notif, trigger: notifTrigger/

UNUserNotificationCenter.current//.add/request, withCompletionHandler: { error in
if error != nil {
print/error/
// completion/Success: false/
} else {
//completion/Sucess: true/
}
}/
}


J'ai demandé la permission de
appDelegate

, Et les notifications sont affichées normalement avec ma représentation de l'utilisateur à l'aide de l'expansion des notifications.

J'ai ajouté de notification à
appDelegate

pour les notifications de catégorie; Ils apparaissent aussi.


//Notifications Actions 

private func configureUserNotifications// {
if #available/iOS 10.0, */ {

let tomorrowAction = UNNotificationAction/identifier: "tomorrowReminder", title: "Remind Me Tomorrow", options: []/

let dismissAction = UNNotificationAction/identifier: "dismissReminder", title: "Dismiss", options: []/


let category = UNNotificationCategory/identifier: "reminderNotification", actions: [tomorrowAction, dismissAction], intentIdentifiers: [], options: [.customDismissAction]/

UNUserNotificationCenter.current//.setNotificationCategories/[category]/

} else {
// Fallback on earlier versions
}
}


J'ai la même catégorie installée dans le fichier d'expansion de notification.
.plist

. Et en extension de la notification, j'ai ci-après modifier le texte lorsque l'utilisateur clique sur l'action.


//Handle Notification Actions And Update Notification Window 


private func didReceive/_ response: UNNotificationResponse, completionHandler done: /UNNotificationContentExtensionResponseOption/ -> Void/ {

if response.actionIdentifier == "tomorrowReminder" {
print/"Tomrrow Button Pressed"/
subLabel.text = "Reminder For Tomorrow"
subLabel.textColor = UIColor.blue
done/.dismissAndForwardAction/
}

if response.actionIdentifier == "dismissReminder" {
print/"Dismiss Button Pressed"/
done/.dismiss/

} else {
print/"Else response"/
done/.dismissAndForwardAction/
}

}


Cependant, le texte ne change pas et aucune des déclarations n'est appelée;

DANS appDelegate J'ai ce qui suit;


func application/_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil/ -> Bool {
if #available/iOS 10.0, */ {
UNUserNotificationCenter.current//.delegate = self
configureUserNotifications//

}
}

extension AppDelegate: UNUserNotificationCenterDelegate {

@available/iOS 10.0, */
private func userNotificationCenter/_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: /UNNotificationPresentationOptions/ -> Void/ {
completionHandler/[.alert, .sound]/
}

@available/iOS 10.0, */
private func userNotificationCenter/_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: // -> Void/ {

print/"Recieved Action For \/response.actionIdentifier/"/

if response.actionIdentifier == "tomorrowReminder" {
print/"Tomorrow Reminder"/


//Set new reminder for tomorrow using the notification content title



completionHandler//
}

if response.actionIdentifier == "dismissReminder" {
print/"Dismiss Reminder..."/
completionHandler//
}
}

}


Aucune de ces fonctions ne sont vraiment appelées
appDelegate

. Je ne suis pas sûr que le problème de mise à jour de l'expansion est lié au délégué de l'application. Je ne pense pas que j'ai regardé la vidéo Apple WWDC, ainsi que pour d'autres manuels et regardé le document API Et je ne peux pas comprendre;

Pourquoi les notifications d'expansion de l'étiquette de texte ne sont pas mises à jour ?

Pourquoi fonctionne B. appDelegate ne sont pas appelés ?

Comment puis-je utiliser le contenu de la notification dans le délégué de l'application?
Effectuer une action ?

PS: J'ai passé ces dernières semaines, explorer et essayer de comprendre cela, il semblait assez simple et je ne suis pas sûr de manquer. Je sais que non seulement j'ai ces problèmes.
Invité:

Charles

Confirmation de:

Je n'ai pas vérifié votre code entier, mais au moins ces titres de fonctions devraient être modifiés comme suit:


func userNotificationCenter/_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping /UNNotificationPresentationOptions/ -> Void/ {

func userNotificationCenter/_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping // -> Void/ {

func didReceive/_ response: UNNotificationResponse,
completionHandler done: @escaping /UNNotificationContentExtensionResponseOption/ -> Void/ {


RÈGLE SIMPLE:

Effacer
private

, Ajouter
@escaping

.

Vous avez peut-être reçu des offres incorrectes de Xcode, Mais en les faisant
private

, Objective-C Les points d'entrée ne sont pas générés. iOS runtime Les usages Objective-C Le sélecteur à l'intérieur de lui-même, il ne peut donc pas trouver vos méthodes, ils ne sont donc pas exécutés.

Pour répondre aux questions, connectez-vous ou registre