mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-26 03:45:21 +00:00
Fix network notifications and add debugging
- Network notifications now show even when app is in foreground - Added unique identifiers to prevent iOS deduplication - Set interruptionLevel to timeSensitive for prominence - Added comprehensive logging throughout notification flow - Improved error handling for notification permissions
This commit is contained in:
@@ -1353,16 +1353,19 @@ class BluetoothMeshService: NSObject {
|
|||||||
// Check if we should reset the notification flag
|
// Check if we should reset the notification flag
|
||||||
if let emptyTime = networkBecameEmptyTime {
|
if let emptyTime = networkBecameEmptyTime {
|
||||||
let currentNetworkSize = collectionsQueue.sync { activePeers.count }
|
let currentNetworkSize = collectionsQueue.sync { activePeers.count }
|
||||||
|
print("📱 Checking network empty state: size=\(currentNetworkSize), emptyTime=\(emptyTime)")
|
||||||
if currentNetworkSize == 0 {
|
if currentNetworkSize == 0 {
|
||||||
// Network is still empty, check if enough time has passed
|
// Network is still empty, check if enough time has passed
|
||||||
let timeSinceEmpty = Date().timeIntervalSince(emptyTime)
|
let timeSinceEmpty = Date().timeIntervalSince(emptyTime)
|
||||||
if timeSinceEmpty >= networkEmptyResetDelay {
|
if timeSinceEmpty >= networkEmptyResetDelay {
|
||||||
// Reset the flag after network has been empty for the delay period
|
// Reset the flag after network has been empty for the delay period
|
||||||
|
print("📱 Resetting notification flag after \(timeSinceEmpty)s of empty network")
|
||||||
hasNotifiedNetworkAvailable = false
|
hasNotifiedNetworkAvailable = false
|
||||||
// Keep the empty time set so we don't immediately notify again
|
// Keep the empty time set so we don't immediately notify again
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Network is no longer empty, clear the empty time
|
// Network is no longer empty, clear the empty time
|
||||||
|
print("📱 Network no longer empty, clearing empty time")
|
||||||
networkBecameEmptyTime = nil
|
networkBecameEmptyTime = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1975,6 +1978,7 @@ class BluetoothMeshService: NSObject {
|
|||||||
|
|
||||||
// Check if we've already announced this peer
|
// Check if we've already announced this peer
|
||||||
let isFirstAnnounce = !announcedPeers.contains(senderID)
|
let isFirstAnnounce = !announcedPeers.contains(senderID)
|
||||||
|
print("📱 Peer announce: \(senderID), isFirstAnnounce: \(isFirstAnnounce), wasInserted: \(wasInserted ?? false)")
|
||||||
|
|
||||||
// Clean up stale peer IDs with the same nickname
|
// Clean up stale peer IDs with the same nickname
|
||||||
collectionsQueue.sync(flags: .barrier) {
|
collectionsQueue.sync(flags: .barrier) {
|
||||||
@@ -2115,6 +2119,8 @@ class BluetoothMeshService: NSObject {
|
|||||||
|
|
||||||
// Send network available notification if appropriate
|
// Send network available notification if appropriate
|
||||||
let currentNetworkSize = collectionsQueue.sync { self.activePeers.count }
|
let currentNetworkSize = collectionsQueue.sync { self.activePeers.count }
|
||||||
|
print("📱 Network size after peer announce: \(currentNetworkSize), hasNotified: \(hasNotifiedNetworkAvailable)")
|
||||||
|
|
||||||
if currentNetworkSize > 0 {
|
if currentNetworkSize > 0 {
|
||||||
// Clear empty time since network is active
|
// Clear empty time since network is active
|
||||||
networkBecameEmptyTime = nil
|
networkBecameEmptyTime = nil
|
||||||
@@ -2126,17 +2132,24 @@ class BluetoothMeshService: NSObject {
|
|||||||
|
|
||||||
if let lastNotification = lastNetworkNotificationTime {
|
if let lastNotification = lastNetworkNotificationTime {
|
||||||
let timeSinceLastNotification = now.timeIntervalSince(lastNotification)
|
let timeSinceLastNotification = now.timeIntervalSince(lastNotification)
|
||||||
|
print("📱 Time since last notification: \(timeSinceLastNotification)s, cooldown: \(networkNotificationCooldown)s")
|
||||||
if timeSinceLastNotification < networkNotificationCooldown {
|
if timeSinceLastNotification < networkNotificationCooldown {
|
||||||
// Too soon to send another notification
|
// Too soon to send another notification
|
||||||
shouldSendNotification = false
|
shouldSendNotification = false
|
||||||
|
print("📱 Skipping notification - cooldown period active")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if shouldSendNotification {
|
if shouldSendNotification {
|
||||||
|
print("📱 Triggering network availability notification for \(currentNetworkSize) peers")
|
||||||
hasNotifiedNetworkAvailable = true
|
hasNotifiedNetworkAvailable = true
|
||||||
lastNetworkNotificationTime = now
|
lastNetworkNotificationTime = now
|
||||||
NotificationService.shared.sendNetworkAvailableNotification(peerCount: currentNetworkSize)
|
NotificationService.shared.sendNetworkAvailableNotification(peerCount: currentNetworkSize)
|
||||||
|
} else {
|
||||||
|
print("📱 Not sending notification - cooldown active")
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
print("📱 Not sending notification - already notified")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ class NotificationService {
|
|||||||
private init() {}
|
private init() {}
|
||||||
|
|
||||||
func requestAuthorization() {
|
func requestAuthorization() {
|
||||||
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, _ in
|
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
|
||||||
if granted {
|
if granted {
|
||||||
// Permission granted
|
print("📱 Notification permission granted")
|
||||||
|
} else {
|
||||||
|
print("📱 Notification permission denied: \(error?.localizedDescription ?? "Unknown")")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -87,8 +89,29 @@ class NotificationService {
|
|||||||
func sendNetworkAvailableNotification(peerCount: Int) {
|
func sendNetworkAvailableNotification(peerCount: Int) {
|
||||||
let title = "👥 bitchatters nearby!"
|
let title = "👥 bitchatters nearby!"
|
||||||
let body = peerCount == 1 ? "1 person around" : "\(peerCount) people around"
|
let body = peerCount == 1 ? "1 person around" : "\(peerCount) people around"
|
||||||
let identifier = "network-available"
|
let identifier = "network-available-\(Date().timeIntervalSince1970)"
|
||||||
|
|
||||||
sendLocalNotification(title: title, body: body, identifier: identifier)
|
print("📱 Sending network notification: \(body)")
|
||||||
|
|
||||||
|
// For network notifications, we want to show them even in foreground
|
||||||
|
let content = UNMutableNotificationContent()
|
||||||
|
content.title = title
|
||||||
|
content.body = body
|
||||||
|
content.sound = .default
|
||||||
|
content.interruptionLevel = .timeSensitive // Make it more prominent
|
||||||
|
|
||||||
|
let request = UNNotificationRequest(
|
||||||
|
identifier: identifier,
|
||||||
|
content: content,
|
||||||
|
trigger: nil // Deliver immediately
|
||||||
|
)
|
||||||
|
|
||||||
|
UNUserNotificationCenter.current().add(request) { error in
|
||||||
|
if let error = error {
|
||||||
|
print("📱 Error sending network notification: \(error)")
|
||||||
|
} else {
|
||||||
|
print("📱 Network notification sent successfully")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user