feat(ios): implement getExactAlarmStatus and openExactAlarmSettings methods
Implemented exact alarm status methods matching Android functionality: getExactAlarmStatus(): - Returns exact alarm scheduling capability information - iOS always supports exact alarms (UNUserNotificationCenter) - Returns supported=true, enabled based on notification authorization - No fallback window needed (exact scheduling always available) - Matches Android API structure openExactAlarmSettings(): - Opens iOS app notification settings - iOS doesn't have separate exact alarm settings like Android - Opens general app settings instead - Provides API compatibility with Android iOS Adaptations: - Exact alarms always supported (no permission needed) - Enabled status based on notification authorization - No fallback window (precise scheduling always available) - Opens app settings instead of exact alarm settings Progress: 32/52 methods implemented (62% complete)
This commit is contained in:
@@ -1278,6 +1278,76 @@ public class DailyNotificationPlugin: CAPPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get exact alarm status
|
||||||
|
*
|
||||||
|
* Returns detailed information about exact alarm scheduling capability.
|
||||||
|
* On iOS, exact alarms are always supported via UNUserNotificationCenter.
|
||||||
|
*
|
||||||
|
* Equivalent to Android's getExactAlarmStatus method.
|
||||||
|
*/
|
||||||
|
@objc func getExactAlarmStatus(_ call: CAPPluginCall) {
|
||||||
|
print("DNP-PLUGIN: Getting exact alarm status")
|
||||||
|
|
||||||
|
// iOS always supports exact alarms via UNUserNotificationCenter
|
||||||
|
// Background App Refresh is the closest equivalent to Android's exact alarm permission
|
||||||
|
// but we can't check it directly - we assume it's enabled if notifications are authorized
|
||||||
|
notificationCenter.getNotificationSettings { settings in
|
||||||
|
let notificationsEnabled = settings.authorizationStatus == .authorized
|
||||||
|
|
||||||
|
// iOS supports exact alarms (UNUserNotificationCenter provides precise scheduling)
|
||||||
|
let supported = true
|
||||||
|
let enabled = notificationsEnabled // Assume enabled if notifications are authorized
|
||||||
|
let canSchedule = enabled
|
||||||
|
let fallbackWindow = "0 minutes" // No fallback needed on iOS - exact scheduling is always available
|
||||||
|
|
||||||
|
let result: [String: Any] = [
|
||||||
|
"supported": supported,
|
||||||
|
"enabled": enabled,
|
||||||
|
"canSchedule": canSchedule,
|
||||||
|
"fallbackWindow": fallbackWindow
|
||||||
|
]
|
||||||
|
|
||||||
|
print("DNP-PLUGIN: Exact alarm status: supported=\(supported), enabled=\(enabled), canSchedule=\(canSchedule)")
|
||||||
|
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
call.resolve(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open exact alarm settings
|
||||||
|
*
|
||||||
|
* Opens iOS notification settings for the app.
|
||||||
|
* iOS doesn't have separate exact alarm settings like Android.
|
||||||
|
*
|
||||||
|
* Equivalent to Android's openExactAlarmSettings method.
|
||||||
|
*/
|
||||||
|
@objc func openExactAlarmSettings(_ call: CAPPluginCall) {
|
||||||
|
print("DNP-PLUGIN: Opening exact alarm settings (iOS: opens app notification settings)")
|
||||||
|
|
||||||
|
// iOS doesn't have separate exact alarm settings
|
||||||
|
// Open app notification settings instead
|
||||||
|
if let settingsUrl = URL(string: UIApplication.openSettingsURLString) {
|
||||||
|
if UIApplication.shared.canOpenURL(settingsUrl) {
|
||||||
|
UIApplication.shared.open(settingsUrl) { success in
|
||||||
|
if success {
|
||||||
|
print("DNP-PLUGIN: Settings opened successfully")
|
||||||
|
call.resolve()
|
||||||
|
} else {
|
||||||
|
print("DNP-PLUGIN: Failed to open settings")
|
||||||
|
call.reject("Failed to open settings")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
call.reject("Cannot open settings URL")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
call.reject("Invalid settings URL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Private Implementation Methods
|
// MARK: - Private Implementation Methods
|
||||||
|
|
||||||
private func setupBackgroundTasks() {
|
private func setupBackgroundTasks() {
|
||||||
|
|||||||
Reference in New Issue
Block a user