Я работаю над одним из кодов, где я отправляю данные в iCloud с помощью CloudKit и извлекаю их оттуда. Я могу получить данные и отобразить их в виде таблицы. Но я пытаюсь настроить уведомления так, чтобы с одного устройства, если данные вставлены в icloud, другое устройство получало уведомление со звуком по умолчанию.
Я добавил некоторую функцию в файл AppDelegate.swift, а также в мой файл viewcontroller, как показано в приведенном ниже коде.
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge], completionHandler: {authorized, error in
if authorized {
DispatchQueue.main.async (execute: {
application.registerForRemoteNotifications()
})
}
})
return true
}
func applicationDidEnterBackground(_ application: UIApplication) {
application.applicationIconBadgeNumber = 0
}
func applicationDidBecomeActive(_ application: UIApplication) {
application.applicationIconBadgeNumber = 0
}
Вне AppDelegate класс
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .sound, .badge])
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
completionHandler()
}
}
В файле ViewController.swift
func setupCloudSubscription() {
let userDefaults = UserDefaults.standard
if userDefaults.bool(forKey: "subscribed") == false {
let predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
let subscription = CKQuerySubscription(recordType: "RecordName", predicate: predicate, options: CKQuerySubscription.Options.firesOnRecordCreation)
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.alertLocalizationKey = "New Added"
notificationInfo.shouldBadge = true
subscription.notificationInfo = notificationInfo
let publicData = CKContainer.default().publicCloudDatabase
publicData.save(subscription, completionHandler: {subscription, error in
if error != nil {
print(error?.localizedDescription)
} else {
userDefaults.set(true, forKey: "subscribed")
userDefaults.synchronize()
}
})
}
}
В настоящее время, когда отправляется уведомление, номер значка показывает 5, 7 или 4 и т. Д. Я хочу, чтобы номер значка показывал 1, если отправлено одно уведомление, или 2, если отправлено два уведомления. Кроме того, я не получаю никакого звука для каждого отправленного уведомления.