fixing ios push notifications

This commit is contained in:
otsmr 2025-10-28 14:28:44 +01:00
parent 071c5c2a0d
commit bd4c30ed4d
2 changed files with 17 additions and 4 deletions

View file

@ -35,6 +35,7 @@ class NotificationService: UNNotificationServiceExtension {
bestAttemptContent.body = data!.body bestAttemptContent.body = data!.body
bestAttemptContent.threadIdentifier = String(format: "%d", data!.notificationId) bestAttemptContent.threadIdentifier = String(format: "%d", data!.notificationId)
} else { } else {
NSLog("Could not decrypt message. Show default.")
bestAttemptContent.title = "\(bestAttemptContent.title)" bestAttemptContent.title = "\(bestAttemptContent.title)"
} }
@ -81,7 +82,8 @@ func getPushNotificationData(pushData: String) -> (
key: pushKey.key, pushData: pushData) key: pushKey.key, pushData: pushData)
if pushNotification != nil { if pushNotification != nil {
pushUser = tryPushUser pushUser = tryPushUser
if pushNotification!.messageID <= pushUser!.lastMessageID { if isUUIDNewer(pushUser!.lastMessageID, pushNotification!.messageID)
{
return ("blocked", "blocked", 0) return ("blocked", "blocked", 0)
} }
break break
@ -125,6 +127,16 @@ func getPushNotificationData(pushData: String) -> (
} }
} }
func isUUIDNewer(_ uuid1: String, _ uuid2: String) -> Bool {
guard uuid1.count >= 8, uuid2.count >= 8 else { return true }
let hex1 = String(uuid1.prefix(8))
let hex2 = String(uuid2.prefix(8))
guard let timestamp1 = UInt32(hex1, radix: 16),
let timestamp2 = UInt32(hex2, radix: 16)
else { return true }
return timestamp1 > timestamp2
}
func tryDecryptMessage(key: Data, pushData: EncryptedPushNotification) -> PushNotification? { func tryDecryptMessage(key: Data, pushData: EncryptedPushNotification) -> PushNotification? {
do { do {
@ -152,8 +164,8 @@ func tryDecryptMessage(key: Data, pushData: EncryptedPushNotification) -> PushNo
func getPushUsers() -> [PushUser]? { func getPushUsers() -> [PushUser]? {
// Retrieve the data from secure storage (Keychain) // Retrieve the data from secure storage (Keychain)
guard let pushUsersB64 = readFromKeychain(key: "receiving_push_keys") else { guard let pushUsersB64 = readFromKeychain(key: "push_keys_receiving") else {
NSLog("No data found for key: receiving_push_keys") NSLog("No data found for key: push_keys_receiving")
return nil return nil
} }
guard let pushUsersBytes = Data(base64Encoded: pushUsersB64) else { guard let pushUsersBytes = Data(base64Encoded: pushUsersB64) else {

View file

@ -70,7 +70,8 @@ Future<(Uint8List, Uint8List?)?> tryToSendCompleteMessage({
); );
Uint8List? pushData; Uint8List? pushData;
if (pushNotification != null) { if (pushNotification != null && receipt.retryCount <= 3) {
/// In case the message has to be resend more than three times, do not show a notification again...
pushData = pushData =
await encryptPushNotification(receipt.contactId, pushNotification); await encryptPushNotification(receipt.contactId, pushNotification);
} }