Files
daily-notification-plugin/USAGE.md
Matthew Raymer 09661a520f refactor: remove dead code and unused files
- Remove duplicate web implementation (src/web.ts - 1,129 lines)
- Remove unused DailyNotification wrapper class (src/daily-notification.ts - 288 lines)
- Remove unused callback registry (src/callback-registry.ts - 413 lines)
- Remove unused example files (5 files, ~1,500 lines)
- Remove unused TypeScript modules (moved to test-apps/shared/typescript/)
- Remove unused interfaces (ContentHandler, ScheduleOptions)
- Remove outdated documentation files (VERIFICATION_*, GLOSSARY, etc.)
- Update import paths in test apps to use moved TypeScript modules
- Clean up README and USAGE.md references to deleted files

Total cleanup: ~3,330+ lines of dead code removed
Files deleted: 20 files
Files modified: 6 files (import path updates and documentation cleanup)

This significantly reduces codebase complexity and maintenance burden.
2025-10-07 05:19:09 +00:00

254 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Daily Notification Plugin - Usage Guide
## Quick Start
```typescript
import { DailyNotification } from '@timesafari/daily-notification-plugin';
// 1. Configure the plugin
await DailyNotification.configure({
storage: 'shared', // Use shared SQLite database
ttlSeconds: 1800, // 30 minutes TTL
prefetchLeadMinutes: 15 // Prefetch 15 minutes before delivery
});
// 2. Schedule a notification
await DailyNotification.scheduleDailyNotification({
url: 'https://api.example.com/daily-content',
time: '09:00',
title: 'Daily Update',
body: 'Your daily notification is ready'
});
```
## Configuration Options
### Storage Mode
- **`'shared'`** (Recommended): Uses shared SQLite database with WAL mode
- **`'tiered'`** (Legacy): Uses SharedPreferences/UserDefaults + in-memory cache
### TTL Settings
- **`ttlSeconds`**: Maximum age of content at delivery time (default: 1800 = 30 minutes)
- **`prefetchLeadMinutes`**: How early to prefetch content (default: 15 minutes)
### Performance Optimization
- **`enableETagSupport`**: Use conditional requests for bandwidth savings
- **`enableErrorHandling`**: Advanced retry logic with exponential backoff
- **`enablePerformanceOptimization`**: Database indexes, memory management, object pooling
## Static Daily Reminders
For simple daily reminders that don't require network content or content caching:
### Basic Usage
```typescript
// Schedule a simple daily reminder
await DailyNotification.scheduleDailyReminder({
id: 'morning_checkin',
title: 'Good Morning!',
body: 'Time to check your TimeSafari community updates',
time: '09:00' // HH:mm format
});
```
### Advanced Configuration
```typescript
// Schedule a customized reminder
await DailyNotification.scheduleDailyReminder({
id: 'evening_reflection',
title: 'Evening Reflection',
body: 'Take a moment to reflect on your day',
time: '20:00',
sound: true,
vibration: true,
priority: 'high',
repeatDaily: true,
timezone: 'America/New_York'
});
```
### Reminder Management
```typescript
// Get all scheduled reminders
const result = await DailyNotification.getScheduledReminders();
console.log('Scheduled reminders:', result.reminders);
// Update an existing reminder
await DailyNotification.updateDailyReminder('morning_checkin', {
title: 'Updated Morning Check-in',
time: '08:30',
priority: 'high'
});
// Cancel a specific reminder
await DailyNotification.cancelDailyReminder('evening_reflection');
```
### Key Benefits
-**No Network Required**: Works completely offline
-**No Content Cache**: Direct notification display without caching
-**Simple API**: Easy-to-use methods for basic reminder functionality
-**Persistent**: Survives app restarts and device reboots
-**Cross-Platform**: Consistent behavior across Android, iOS, and Web
### Time Format
Use 24-hour format with leading zeros:
- ✅ Valid: `"09:00"`, `"12:30"`, `"23:59"`
- ❌ Invalid: `"9:00"`, `"24:00"`, `"12:60"`
## Platform-Specific Features
### Android
```typescript
// Check exact alarm status
const alarmStatus = await DailyNotification.getExactAlarmStatus();
if (!alarmStatus.canSchedule) {
// Request permission or use windowed fallback
await DailyNotification.requestExactAlarmPermission();
}
// Check reboot recovery status
const recoveryStatus = await DailyNotification.getRebootRecoveryStatus();
if (recoveryStatus.recoveryNeeded) {
console.log('System may have rebooted - notifications restored');
}
```
### iOS
```typescript
// Background tasks are automatically handled
// The plugin uses BGTaskScheduler for Tlead prefetch
// No additional configuration needed
```
## Advanced Usage
### Error Handling
```typescript
// Configure retry behavior
await DailyNotification.configure({
maxRetries: 3,
baseRetryDelay: 1000, // 1 second
maxRetryDelay: 30000, // 30 seconds
backoffMultiplier: 2.0
});
// Monitor error metrics
const errorMetrics = await DailyNotification.getErrorMetrics();
console.log(`Network errors: ${errorMetrics.networkErrors}`);
console.log(`Cache hit ratio: ${errorMetrics.cacheHitRatio}`);
```
### Performance Monitoring
```typescript
// Get performance metrics
const metrics = await DailyNotification.getPerformanceMetrics();
console.log(`Performance score: ${metrics.overallScore}/100`);
console.log(`Memory usage: ${metrics.averageMemoryUsage}MB`);
// Optimize if needed
if (metrics.overallScore < 70) {
await DailyNotification.optimizeMemory();
await DailyNotification.optimizeDatabase();
}
```
### Rolling Window Management
```typescript
// Manual maintenance
await DailyNotification.maintainRollingWindow();
// Check status
const windowStats = await DailyNotification.getRollingWindowStats();
console.log(`Maintenance needed: ${windowStats.maintenanceNeeded}`);
console.log(`Time until next: ${windowStats.timeUntilNextMaintenance}ms`);
```
## Production Configuration
```typescript
// Recommended production settings
await DailyNotification.configure({
storage: 'shared',
ttlSeconds: 1800,
prefetchLeadMinutes: 15,
enableETagSupport: true,
enableErrorHandling: true,
enablePerformanceOptimization: true,
memoryWarningThreshold: 50, // MB
memoryCriticalThreshold: 100, // MB
objectPoolSize: 20,
maxObjectPoolSize: 100
});
```
## Troubleshooting
### Common Issues
1. **Notifications not firing**
- Check exact alarm permissions on Android
- Verify TTL settings aren't too restrictive
- Ensure rolling window is maintained
2. **High memory usage**
- Enable performance optimization
- Check memory thresholds
- Monitor object pool efficiency
3. **Network efficiency**
- Enable ETag support
- Monitor cache hit ratios
- Check error retry patterns
### Debug Information
```typescript
// Get comprehensive debug info
const debugInfo = await DailyNotification.getDebugInfo();
console.log('Plugin Status:', debugInfo.status);
console.log('Configuration:', debugInfo.configuration);
console.log('Recent Errors:', debugInfo.recentErrors);
```
## Migration from Legacy Storage
```typescript
// The plugin automatically migrates from tiered to shared storage
// No manual migration needed - just configure with storage: 'shared'
await DailyNotification.configure({
storage: 'shared' // Triggers automatic migration
});
```
## Best Practices
1. **Always configure before scheduling** - Set up storage, TTL, and optimization features
2. **Monitor performance metrics** - Use built-in monitoring to optimize settings
3. **Handle errors gracefully** - Implement retry logic and fallback mechanisms
4. **Test on both platforms** - Android and iOS have different capabilities and limitations
5. **Use production settings** - Enable all optimization features for production use
## API Reference
See `src/definitions.ts` for complete TypeScript interface definitions.
## Examples
- **Basic Usage**: `examples/hello-poll.ts`
- **Stale Data UX**: `examples/stale-data-ux.ts`
- **Enterprise Features**: See `INTEGRATION_GUIDE.md` for enterprise integration patterns