# Daily Notification Plugin - Quick Integration Guide
**Author**: Matthew Raymer
**Version**: 2.2.0
**Last Updated**: 2025-11-06
## Overview
This guide provides a **quick, step-by-step** process for integrating the Daily Notification Plugin into any Capacitor application. For detailed documentation, see [README.md](./README.md) and [API.md](./API.md).
**For AI Agents**: See [AI_INTEGRATION_GUIDE.md](./AI_INTEGRATION_GUIDE.md) for explicit, machine-readable integration instructions with verification steps and error handling.
## Prerequisites
- Capacitor 6.0+ project
- Android Studio (for Android development)
- Xcode 14+ (for iOS development)
- Node.js 18+
## Step 1: Install the Plugin
```bash
npm install @timesafari/daily-notification-plugin
```
Or install from Git:
```bash
npm install git+https://github.com/timesafari/daily-notification-plugin.git
```
## Step 2: Sync Capacitor
```bash
npx cap sync android
npx cap sync ios
```
## Step 3: Android Configuration
### 3.1 Update AndroidManifest.xml
**⚠️ CRITICAL**: You **must** add the `NotifyReceiver` registration to your app's `AndroidManifest.xml`. Without it, alarms will fire but notifications won't be displayed.
Add to `android/app/src/main/AndroidManifest.xml`:
```xml
```
### 3.2 Update build.gradle (if needed)
The plugin should work with standard Capacitor setup. If you encounter dependency issues, ensure these are in `android/app/build.gradle`:
```gradle
dependencies {
// ... your existing dependencies ...
// Plugin dependencies (usually auto-added by Capacitor sync)
implementation "androidx.room:room-runtime:2.6.1"
implementation "androidx.work:work-runtime-ktx:2.9.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
annotationProcessor "androidx.room:room-compiler:2.6.1"
}
```
## Step 4: iOS Configuration
### 4.1 Update Info.plist
Add to `ios/App/App/Info.plist`:
```xml
UIBackgroundModes
background-app-refresh
background-processing
BGTaskSchedulerPermittedIdentifiers
com.timesafari.dailynotification.content-fetch
com.timesafari.dailynotification.notification-delivery
```
### 4.2 Enable Capabilities
In Xcode:
1. Select your app target
2. Go to "Signing & Capabilities"
3. Enable "Background Modes"
4. Check "Background App Refresh" and "Background Processing"
## Step 5: Use the Plugin
### Basic Usage
```typescript
import { DailyNotification } from '@timesafari/daily-notification-plugin';
// Configure the plugin
await DailyNotification.configure({
storage: 'tiered',
ttlSeconds: 1800,
enableETagSupport: true
});
// Schedule a daily notification
await DailyNotification.scheduleDailyNotification({
title: 'Daily Update',
body: 'Your daily content is ready',
schedule: '0 9 * * *' // 9 AM daily (cron format)
});
```
### Request Permissions
```typescript
// Check permissions
const status = await DailyNotification.checkPermissions();
console.log('Notification permission:', status.notifications);
// Request permissions
if (status.notifications !== 'granted') {
await DailyNotification.requestPermissions();
}
```
### Schedule a Simple Reminder
```typescript
// Schedule a static daily reminder (no network required)
await DailyNotification.scheduleDailyReminder({
id: 'morning_checkin',
title: 'Good Morning!',
body: 'Time to check your updates',
time: '09:00', // HH:mm format
sound: true,
vibration: true,
priority: 'normal'
});
```
### Diagnostic Methods (Android)
```typescript
// Check if an alarm is scheduled
const result = await DailyNotification.isAlarmScheduled({
triggerAtMillis: scheduledTime
});
console.log('Alarm scheduled:', result.scheduled);
// Get next alarm time
const nextAlarm = await DailyNotification.getNextAlarmTime();
if (nextAlarm.scheduled) {
console.log('Next alarm:', new Date(nextAlarm.triggerAtMillis));
}
// Test alarm delivery (schedules alarm for 10 seconds from now)
await DailyNotification.testAlarm({ secondsFromNow: 10 });
```
## Step 6: Verify Installation
### Check Plugin Registration
```typescript
// Verify plugin is available
if (window.Capacitor?.Plugins?.DailyNotification) {
console.log('✅ Plugin is registered');
} else {
console.error('❌ Plugin not found');
}
```
### Test Notification
```typescript
// Schedule a test notification for 10 seconds from now
await DailyNotification.testAlarm({ secondsFromNow: 10 });
// Or schedule a regular notification
await DailyNotification.scheduleDailyReminder({
id: 'test',
title: 'Test Notification',
body: 'This is a test',
time: new Date(Date.now() + 60000).toTimeString().slice(0, 5) // 1 minute from now
});
```
## Troubleshooting
### Notifications Not Appearing
1. **Check NotifyReceiver Registration**: Verify `NotifyReceiver` is in your `AndroidManifest.xml` (see Step 3.1)
2. **Check Permissions**: Ensure notification permissions are granted
3. **Check Logs**: Use ADB to check logs:
```bash
adb logcat | grep -E "DNP-|NotifyReceiver|Notification"
```
4. **Use Diagnostic Methods**: Use `isAlarmScheduled()` and `getNextAlarmTime()` to verify alarms
### Common Issues
#### Android: "Alarm fires but notification doesn't appear"
- **Solution**: Ensure `NotifyReceiver` is registered in your app's `AndroidManifest.xml` (not just the plugin's manifest)
#### Android: "Permission denied" errors
- **Solution**: Request `POST_NOTIFICATIONS` and `SCHEDULE_EXACT_ALARM` permissions
#### iOS: Background tasks not running
- **Solution**: Ensure Background Modes are enabled in Xcode capabilities
#### Plugin not found
- **Solution**: Run `npx cap sync` and rebuild the app
## Next Steps
- Read the [API Reference](./API.md) for complete method documentation
- Check [README.md](./README.md) for advanced usage examples
- Review [docs/notification-testing-procedures.md](./docs/notification-testing-procedures.md) for testing guidance
## Support
For issues or questions:
- Check the troubleshooting section above
- Review the [API documentation](./API.md)
- Check [docs/notification-testing-procedures.md](./docs/notification-testing-procedures.md) for debugging steps