Avoid repeating push messages after opening notifications
This commit is contained in:
parent
aab402f612
commit
a8525a5075
|
|
@ -294,7 +294,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CODE_SIGN_ENTITLEMENTS = Kasztelan/Kasztelan.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Kasztelan/Kasztelan.entitlements;
|
||||||
APS_ENVIRONMENT = development;
|
APS_ENVIRONMENT = development;
|
||||||
CURRENT_PROJECT_VERSION = 17;
|
CURRENT_PROJECT_VERSION = 18;
|
||||||
GENERATE_INFOPLIST_FILE = NO;
|
GENERATE_INFOPLIST_FILE = NO;
|
||||||
INFOPLIST_FILE = Kasztelan/Info.plist;
|
INFOPLIST_FILE = Kasztelan/Info.plist;
|
||||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.food-and-drink";
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.food-and-drink";
|
||||||
|
|
@ -320,7 +320,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CODE_SIGN_ENTITLEMENTS = Kasztelan/Kasztelan.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Kasztelan/Kasztelan.entitlements;
|
||||||
APS_ENVIRONMENT = production;
|
APS_ENVIRONMENT = production;
|
||||||
CURRENT_PROJECT_VERSION = 17;
|
CURRENT_PROJECT_VERSION = 18;
|
||||||
GENERATE_INFOPLIST_FILE = NO;
|
GENERATE_INFOPLIST_FILE = NO;
|
||||||
INFOPLIST_FILE = Kasztelan/Info.plist;
|
INFOPLIST_FILE = Kasztelan/Info.plist;
|
||||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.food-and-drink";
|
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.food-and-drink";
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,7 @@ final class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCent
|
||||||
willPresent notification: UNNotification,
|
willPresent notification: UNNotification,
|
||||||
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
|
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
|
||||||
) {
|
) {
|
||||||
|
NotificationService.recordReceivedPush(notification.request.content)
|
||||||
completionHandler([.banner, .list, .sound])
|
completionHandler([.banner, .list, .sound])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -113,6 +114,7 @@ final class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCent
|
||||||
didReceive response: UNNotificationResponse,
|
didReceive response: UNNotificationResponse,
|
||||||
withCompletionHandler completionHandler: @escaping () -> Void
|
withCompletionHandler completionHandler: @escaping () -> Void
|
||||||
) {
|
) {
|
||||||
|
NotificationService.recordReceivedPush(response.notification.request.content)
|
||||||
NotificationCenter.default.post(name: .kasztelanOpenMessages, object: nil)
|
NotificationCenter.default.post(name: .kasztelanOpenMessages, object: nil)
|
||||||
completionHandler()
|
completionHandler()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,17 @@ enum NotificationService {
|
||||||
try? await APIClient().unregisterPush(deviceToken: deviceToken, token: session)
|
try? await APIClient().unregisterPush(deviceToken: deviceToken, token: session)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static func recordReceivedPush(_ content: UNNotificationContent) {
|
||||||
|
guard let id = content.userInfo["message_id"] as? Int, id > 0 else { return }
|
||||||
|
var received = UserDefaults.standard.array(forKey: "kasztelan.push.receivedIDs") as? [Int] ?? []
|
||||||
|
received.removeAll { $0 == id }
|
||||||
|
received.append(id)
|
||||||
|
UserDefaults.standard.set(Array(received.suffix(100)), forKey: "kasztelan.push.receivedIDs")
|
||||||
|
}
|
||||||
|
|
||||||
static func show(_ message: KasztelanMessage) async {
|
static func show(_ message: KasztelanMessage) async {
|
||||||
|
let received = UserDefaults.standard.array(forKey: "kasztelan.push.receivedIDs") as? [Int] ?? []
|
||||||
|
guard !received.contains(message.id) else { return }
|
||||||
let settings = await UNUserNotificationCenter.current().notificationSettings()
|
let settings = await UNUserNotificationCenter.current().notificationSettings()
|
||||||
guard settings.authorizationStatus == .authorized || settings.authorizationStatus == .provisional else { return }
|
guard settings.authorizationStatus == .authorized || settings.authorizationStatus == .provisional else { return }
|
||||||
let delivered = await UNUserNotificationCenter.current().deliveredNotifications()
|
let delivered = await UNUserNotificationCenter.current().deliveredNotifications()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user