349 lines
9.0 KiB
Markdown
349 lines
9.0 KiB
Markdown
# Daily Notification Plugin - Integration Checklist
|
|
|
|
**Integration Date**: 2026-01-21
|
|
**Plugin Version**: 1.0.11
|
|
**Status**: Phase 1 Complete ✅
|
|
|
|
---
|
|
|
|
## Phase 1: Infrastructure Setup ✅ COMPLETE
|
|
|
|
### Code Files
|
|
- [x] Created `src/plugins/DailyNotificationPlugin.ts`
|
|
- [x] Created `src/services/notifications/NotificationService.ts`
|
|
- [x] Created `src/services/notifications/NativeNotificationService.ts`
|
|
- [x] Created `src/services/notifications/WebPushNotificationService.ts`
|
|
- [x] Created `src/services/notifications/index.ts`
|
|
|
|
### Android Configuration
|
|
|
|
> **Note on `USE_EXACT_ALARM`:** The `USE_EXACT_ALARM` permission is restricted
|
|
> by Google on Android. Apps that declare it must be primarily dedicated to alarm
|
|
> or calendar functionality. Google will reject apps from the Play Store that use
|
|
> this permission for other purposes. This plugin uses `SCHEDULE_EXACT_ALARM`
|
|
> instead, which is sufficient for scheduling daily notifications.
|
|
|
|
- [x] Added permissions to `AndroidManifest.xml`:
|
|
- [x] `POST_NOTIFICATIONS`
|
|
- [x] `SCHEDULE_EXACT_ALARM`
|
|
- [x] `RECEIVE_BOOT_COMPLETED`
|
|
- [x] `WAKE_LOCK`
|
|
- [ ] `USE_EXACT_ALARM` -- must avoid; see note above
|
|
- [x] Registered receivers in `AndroidManifest.xml`:
|
|
- [x] `DailyNotificationReceiver`
|
|
- [x] `BootReceiver`
|
|
- [x] Added dependencies to `build.gradle`:
|
|
- [x] Room (`androidx.room:room-runtime:2.6.1`)
|
|
- [x] WorkManager (`androidx.work:work-runtime-ktx:2.9.0`)
|
|
- [x] Coroutines (`org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3`)
|
|
- [x] Room Compiler (`androidx.room:room-compiler:2.6.1`)
|
|
- [x] Registered plugin in `MainActivity.java`
|
|
|
|
### iOS Configuration
|
|
- [x] Added to `Info.plist`:
|
|
- [x] `UIBackgroundModes` (fetch, processing)
|
|
- [x] `BGTaskSchedulerPermittedIdentifiers`
|
|
- [x] `NSUserNotificationAlertStyle`
|
|
- [ ] ⚠️ **MANUAL STEP**: Xcode capabilities (see Phase 5)
|
|
|
|
### Documentation
|
|
- [x] Created `doc/daily-notification-plugin-integration.md`
|
|
- [x] Created `doc/daily-notification-plugin-integration-summary.md`
|
|
- [x] Created `doc/daily-notification-plugin-architecture.md`
|
|
- [x] Created this checklist
|
|
|
|
---
|
|
|
|
## Phase 2: UI Integration ⏳ TODO
|
|
|
|
### Update Components
|
|
- [ ] Modify `PushNotificationPermission.vue`:
|
|
- [ ] Import `NotificationService`
|
|
- [ ] Replace direct web push calls with service methods
|
|
- [ ] Add platform-aware messaging
|
|
- [ ] Test permission flow
|
|
- [ ] Test notification scheduling
|
|
|
|
### Update Views
|
|
- [ ] Update `AccountViewView.vue`:
|
|
- [ ] Use `NotificationService` for status checks
|
|
- [ ] Add platform indicator
|
|
- [ ] Test settings display
|
|
|
|
### Settings Integration
|
|
- [ ] Verify settings save/load correctly:
|
|
- [ ] `notifyingNewActivityTime` for native
|
|
- [ ] `notifyingReminderMessage` for native
|
|
- [ ] `notifyingReminderTime` for native
|
|
- [ ] Existing web push settings preserved
|
|
|
|
---
|
|
|
|
## Phase 3: Web Push Integration ⏳ TODO
|
|
|
|
### Wire WebPushNotificationService
|
|
- [ ] Extract subscription logic from `PushNotificationPermission.vue`
|
|
- [ ] Implement `scheduleDailyNotification()` method
|
|
- [ ] Implement `cancelDailyNotification()` method
|
|
- [ ] Implement `getStatus()` method
|
|
- [ ] Test web platform notification flow
|
|
|
|
### Server Integration
|
|
- [ ] Verify web push server endpoints still work
|
|
- [ ] Test subscription/unsubscription
|
|
- [ ] Test scheduled message delivery
|
|
|
|
---
|
|
|
|
## Phase 4: Testing ⏳ TODO
|
|
|
|
### Desktop Development
|
|
- [ ] Code compiles without errors
|
|
- [ ] ESLint passes
|
|
- [ ] TypeScript types are correct
|
|
- [ ] Platform detection works in browser console
|
|
|
|
### Android Emulator
|
|
- [ ] App builds successfully
|
|
- [ ] Plugin loads without errors
|
|
- [ ] Can open app and navigate
|
|
- [ ] No JavaScript console errors
|
|
|
|
### Android Device (Real)
|
|
- [ ] Request permissions dialog appears
|
|
- [ ] Permissions can be granted
|
|
- [ ] Schedule notification succeeds
|
|
- [ ] Notification appears at scheduled time
|
|
- [ ] Notification survives app close
|
|
- [ ] Notification survives device reboot
|
|
- [ ] Notification can be cancelled
|
|
|
|
### iOS Simulator
|
|
- [ ] App builds successfully
|
|
- [ ] Plugin loads without errors
|
|
- [ ] Can open app and navigate
|
|
- [ ] No JavaScript console errors
|
|
|
|
### iOS Device (Real)
|
|
- [ ] Request permissions dialog appears
|
|
- [ ] Permissions can be granted
|
|
- [ ] Schedule notification succeeds
|
|
- [ ] Notification appears at scheduled time
|
|
- [ ] Background fetch works
|
|
- [ ] Notification survives app close
|
|
- [ ] Notification can be cancelled
|
|
|
|
### Web Browser
|
|
- [ ] Existing web push still works
|
|
- [ ] No JavaScript errors
|
|
- [ ] Platform detection selects web service
|
|
- [ ] Permission flow works
|
|
- [ ] Subscription works
|
|
|
|
---
|
|
|
|
## Phase 5: iOS Xcode Setup ⚠️ MANUAL REQUIRED
|
|
|
|
### Open Xcode Project
|
|
```bash
|
|
cd ios
|
|
open App/App.xcodeproj
|
|
```
|
|
|
|
### Configure Capabilities
|
|
- [ ] Select "App" target in project navigator
|
|
- [ ] Go to "Signing & Capabilities" tab
|
|
- [ ] Click "+ Capability" button
|
|
- [ ] Add "Background Modes":
|
|
- [ ] Enable "Background fetch"
|
|
- [ ] Enable "Background processing"
|
|
- [ ] Click "+ Capability" button again
|
|
- [ ] Add "Push Notifications" (if using remote notifications)
|
|
|
|
### Install CocoaPods
|
|
```bash
|
|
cd ios
|
|
pod install
|
|
cd ..
|
|
```
|
|
- [ ] Run `pod install` successfully
|
|
- [ ] Verify `CapacitorDailyNotification` pod is installed
|
|
|
|
### Verify Configuration
|
|
- [ ] Build succeeds in Xcode
|
|
- [ ] No capability warnings
|
|
- [ ] No pod errors
|
|
- [ ] Can run on simulator
|
|
|
|
---
|
|
|
|
## Phase 6: Build & Deploy ⏳ TODO
|
|
|
|
### Sync Capacitor
|
|
```bash
|
|
npx cap sync
|
|
```
|
|
- [ ] Sync completes without errors
|
|
- [ ] Plugin files copied to native projects
|
|
|
|
### Build Android
|
|
```bash
|
|
npm run build:android:debug
|
|
```
|
|
- [ ] Build succeeds
|
|
- [ ] APK/AAB generated
|
|
- [ ] Can install on device/emulator
|
|
|
|
### Build iOS
|
|
```bash
|
|
npm run build:ios:debug
|
|
```
|
|
- [ ] Build succeeds
|
|
- [ ] IPA generated (if release)
|
|
- [ ] Can install on device/simulator
|
|
|
|
### Test Production Builds
|
|
- [ ] Android release build works
|
|
- [ ] iOS release build works
|
|
- [ ] Notifications work in production
|
|
|
|
---
|
|
|
|
## Troubleshooting Checklist
|
|
|
|
### Android Issues
|
|
|
|
#### Notifications Not Appearing
|
|
- [ ] Verified `DailyNotificationReceiver` is in AndroidManifest.xml
|
|
- [ ] Checked logcat for errors: `adb logcat | grep DailyNotification`
|
|
- [ ] Verified permissions granted in app settings
|
|
- [ ] Checked "Exact alarms" permission (Android 12+)
|
|
- [ ] Verified notification channel is created
|
|
|
|
#### Build Errors
|
|
- [ ] Verified all dependencies in build.gradle
|
|
- [ ] Ran `./gradlew clean` and rebuilt
|
|
- [ ] Verified Kotlin version compatibility
|
|
- [ ] Checked for conflicting dependencies
|
|
|
|
### iOS Issues
|
|
|
|
#### Notifications Not Appearing
|
|
- [ ] Verified Background Modes enabled in Xcode
|
|
- [ ] Checked Xcode console for errors
|
|
- [ ] Verified permissions granted in Settings app
|
|
- [ ] Tested on real device (not just simulator)
|
|
- [ ] Checked BGTaskScheduler identifiers match Info.plist
|
|
|
|
#### Build Errors
|
|
- [ ] Ran `pod install` successfully
|
|
- [ ] Verified deployment target is iOS 13.0+
|
|
- [ ] Checked for pod conflicts
|
|
- [ ] Cleaned build folder (Xcode → Product → Clean Build Folder)
|
|
|
|
### Web Issues
|
|
|
|
#### Web Push Not Working
|
|
- [ ] Verified service worker is registered
|
|
- [ ] Checked browser console for errors
|
|
- [ ] Verified VAPID keys are correct
|
|
- [ ] Tested in supported browser (Chrome 42+, Firefox)
|
|
- [ ] Checked push server is running
|
|
|
|
#### Permission Issues
|
|
- [ ] Verified permissions not blocked in browser
|
|
- [ ] Checked site settings in browser
|
|
- [ ] Verified HTTPS connection (required for web push)
|
|
|
|
---
|
|
|
|
## Verification Commands
|
|
|
|
### Check Plugin is Installed
|
|
```bash
|
|
npm list @timesafari/daily-notification-plugin
|
|
```
|
|
|
|
### Check Capacitor Sync
|
|
```bash
|
|
npx cap ls
|
|
```
|
|
|
|
### Check Android Build
|
|
```bash
|
|
cd android
|
|
./gradlew clean
|
|
./gradlew assembleDebug
|
|
```
|
|
|
|
### Check iOS Build
|
|
```bash
|
|
cd ios
|
|
pod install
|
|
xcodebuild -workspace App/App.xcworkspace -scheme App -configuration Debug build
|
|
```
|
|
|
|
### Check TypeScript
|
|
```bash
|
|
npm run type-check
|
|
```
|
|
|
|
### Check Linting
|
|
```bash
|
|
npm run lint
|
|
```
|
|
|
|
---
|
|
|
|
## Next Immediate Actions
|
|
|
|
1. **Run Capacitor Sync**:
|
|
```bash
|
|
npx cap sync
|
|
```
|
|
|
|
2. **For iOS Development**:
|
|
```bash
|
|
cd ios
|
|
open App/App.xcodeproj
|
|
# Enable Background Modes capability
|
|
pod install
|
|
cd ..
|
|
```
|
|
|
|
3. **Test on Emulator/Simulator**:
|
|
```bash
|
|
npm run build:android:debug # For Android
|
|
npm run build:ios:debug # For iOS
|
|
```
|
|
|
|
4. **Update UI Components**:
|
|
- Start with `PushNotificationPermission.vue`
|
|
- Import and use `NotificationService`
|
|
|
|
---
|
|
|
|
## Success Criteria
|
|
|
|
- [x] **Phase 1**: All files created and configurations applied
|
|
- [ ] **Phase 2**: Components use NotificationService
|
|
- [ ] **Phase 3**: Web push integrated with service
|
|
- [ ] **Phase 4**: All tests pass on all platforms
|
|
- [ ] **Phase 5**: iOS capabilities configured in Xcode
|
|
- [ ] **Phase 6**: Production builds work on real devices
|
|
|
|
---
|
|
|
|
## Questions or Issues?
|
|
|
|
See documentation:
|
|
- Full guide: `doc/daily-notification-plugin-integration.md`
|
|
- Architecture: `doc/daily-notification-plugin-architecture.md`
|
|
- Summary: `doc/daily-notification-plugin-integration-summary.md`
|
|
|
|
Plugin docs: `node_modules/@timesafari/daily-notification-plugin/README.md`
|
|
|
|
---
|
|
|
|
**Current Status**: Ready for Phase 2 (UI Integration) 🚀
|