fix(ios): use correct Capacitor API for plugin method registration

Fixed plugin registration to use proper Capacitor native bridge API:

API Fix:
- Changed from window.Capacitor.nativePromise to cap.nativePromise
- Added proper initialization wait for Capacitor to be available
- Wrapped in IIFE for proper scoping

Method Registration:
- All methods now use cap.nativePromise(pluginName, methodName, options)
- Methods properly bridge to native Swift implementation
- Added initialization check to wait for Capacitor if not ready

Fixes:
- Error: 'requestNotificationPermissions is not a function'
- Plugin methods now correctly call native bridge
- Proper async initialization ensures Capacitor is ready

Result: Permission buttons and all plugin methods should now work correctly
This commit is contained in:
Matthew Raymer
2025-11-11 23:13:40 -08:00
parent 04311803bc
commit e448b06a8d

View File

@@ -1,75 +1,99 @@
// Capacitor Plugins Registration // Capacitor Plugins Registration
// This file registers the DailyNotification plugin for iOS // This file registers the DailyNotification plugin for iOS
// Methods bridge to native Swift implementation via Capacitor's native bridge
window.Capacitor = window.Capacitor || {}; (function() {
window.Capacitor.Plugins = window.Capacitor.Plugins || {}; 'use strict';
// Register DailyNotification plugin with method stubs // Wait for Capacitor to be available
// Methods will be bridged to native Swift implementation function registerPlugin() {
window.Capacitor.Plugins.DailyNotification = window.Capacitor.Plugins.DailyNotification || { if (!window.Capacitor) {
setTimeout(registerPlugin, 100);
return;
}
const cap = window.Capacitor;
if (!cap.Plugins) {
cap.Plugins = {};
}
// Create plugin object with methods that call native bridge
const DailyNotification = {
// Permission methods // Permission methods
checkPermissionStatus: function() { checkPermissionStatus: function() {
return window.Capacitor.nativePromise('DailyNotification', 'checkPermissionStatus', {}); return cap.nativePromise('DailyNotification', 'checkPermissionStatus', {});
}, },
requestNotificationPermissions: function() { requestNotificationPermissions: function() {
return window.Capacitor.nativePromise('DailyNotification', 'requestNotificationPermissions', {}); return cap.nativePromise('DailyNotification', 'requestNotificationPermissions', {});
}, },
checkPermissions: function() { checkPermissions: function() {
return window.Capacitor.nativePromise('DailyNotification', 'checkPermissions', {}); return cap.nativePromise('DailyNotification', 'checkPermissions', {});
}, },
requestPermissions: function() { requestPermissions: function() {
return window.Capacitor.nativePromise('DailyNotification', 'requestPermissions', {}); return cap.nativePromise('DailyNotification', 'requestPermissions', {});
}, },
// Notification methods // Notification methods
scheduleDailyNotification: function(options) { scheduleDailyNotification: function(options) {
return window.Capacitor.nativePromise('DailyNotification', 'scheduleDailyNotification', options || {}); return cap.nativePromise('DailyNotification', 'scheduleDailyNotification', options || {});
}, },
getNotificationStatus: function() { getNotificationStatus: function() {
return window.Capacitor.nativePromise('DailyNotification', 'getNotificationStatus', {}); return cap.nativePromise('DailyNotification', 'getNotificationStatus', {});
}, },
cancelAllNotifications: function() { cancelAllNotifications: function() {
return window.Capacitor.nativePromise('DailyNotification', 'cancelAllNotifications', {}); return cap.nativePromise('DailyNotification', 'cancelAllNotifications', {});
}, },
// Status methods // Status methods
checkStatus: function() { checkStatus: function() {
return window.Capacitor.nativePromise('DailyNotification', 'checkStatus', {}); return cap.nativePromise('DailyNotification', 'checkStatus', {});
}, },
// Channel methods // Channel methods
isChannelEnabled: function(options) { isChannelEnabled: function(options) {
return window.Capacitor.nativePromise('DailyNotification', 'isChannelEnabled', options || {}); return cap.nativePromise('DailyNotification', 'isChannelEnabled', options || {});
}, },
openChannelSettings: function(options) { openChannelSettings: function(options) {
return window.Capacitor.nativePromise('DailyNotification', 'openChannelSettings', options || {}); return cap.nativePromise('DailyNotification', 'openChannelSettings', options || {});
}, },
// Configuration methods // Configuration methods
configure: function(options) { configure: function(options) {
return window.Capacitor.nativePromise('DailyNotification', 'configure', options || {}); return cap.nativePromise('DailyNotification', 'configure', options || {});
}, },
configureNativeFetcher: function(options) { configureNativeFetcher: function(options) {
return window.Capacitor.nativePromise('DailyNotification', 'configureNativeFetcher', options || {}); return cap.nativePromise('DailyNotification', 'configureNativeFetcher', options || {});
}, },
// Battery/Power methods // Battery/Power methods
getBatteryStatus: function() { getBatteryStatus: function() {
return window.Capacitor.nativePromise('DailyNotification', 'getBatteryStatus', {}); return cap.nativePromise('DailyNotification', 'getBatteryStatus', {});
}, },
getPowerState: function() { getPowerState: function() {
return window.Capacitor.nativePromise('DailyNotification', 'getPowerState', {}); return cap.nativePromise('DailyNotification', 'getPowerState', {});
}, },
requestBatteryOptimizationExemption: function() { requestBatteryOptimizationExemption: function() {
return window.Capacitor.nativePromise('DailyNotification', 'requestBatteryOptimizationExemption', {}); return cap.nativePromise('DailyNotification', 'requestBatteryOptimizationExemption', {});
}, },
// Exact alarm methods // Exact alarm methods
getExactAlarmStatus: function() { getExactAlarmStatus: function() {
return window.Capacitor.nativePromise('DailyNotification', 'getExactAlarmStatus', {}); return cap.nativePromise('DailyNotification', 'getExactAlarmStatus', {});
}, },
openExactAlarmSettings: function() { openExactAlarmSettings: function() {
return window.Capacitor.nativePromise('DailyNotification', 'openExactAlarmSettings', {}); return cap.nativePromise('DailyNotification', 'openExactAlarmSettings', {});
}, },
// Test methods // Test methods
testAlarm: function(options) { testAlarm: function(options) {
return window.Capacitor.nativePromise('DailyNotification', 'testAlarm', options || {}); return cap.nativePromise('DailyNotification', 'testAlarm', options || {});
} }
}; };
console.log('Capacitor plugins file loaded - DailyNotification plugin registered'); // Register plugin
cap.Plugins.DailyNotification = DailyNotification;
console.log('✅ DailyNotification plugin registered with', Object.keys(DailyNotification).length, 'methods');
}
// Register when DOM is ready or immediately if Capacitor is already available
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', registerPlugin);
} else {
registerPlugin();
}
})();