# havesource/cordova-plugin-push architecture

> Architecture diagram of the GitHub repository havesource/cordova-plugin-push, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/havesource/cordova-plugin-push
- Repository: https://github.com/havesource/cordova-plugin-push

## Overview

Cordova Plugin Push exposes a unified JavaScript API for registration, push events, notification handling, and related operations. The main flow runs from an app calling the API, through Cordova’s native bridge or browser implementation, to platform push delivery and back to the app as registration or notification events. Android also handles notification display and user actions; iOS provides corresponding native push integration. Native details beyond the sampled files are represented at their existing platform directories, so those links show documented capability rather than inspected call-level wiring.

Main entry points: [`src/android/com/adobe/phonegap/push/PushPlugin.kt`](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/PushPlugin.kt) (Android Plugin), [`src/android/com/adobe/phonegap/push/FCMService.kt`](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/FCMService.kt) (FCM Service), [`src/js/push.js`](https://github.com/havesource/cordova-plugin-push/blob/master/src/js/push.js) (Push API), [`www/browser/push.js`](https://github.com/havesource/cordova-plugin-push/blob/master/www/browser/push.js) (Browser API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Cordova API"]
  node_pushapi["Push API<br/>[push.js]"]
end

subgraph group_android["Android Runtime"]
  node_androidplugin["Android Plugin<br/>[PushPlugin.kt]"]
  node_fcm["FCM Service<br/>[FCMService.kt]"]
  node_androidtap["Tap Handler"]
  node_androidbackground["Background Handler"]
  node_androidactions["Action Handler"]
  node_dismissed["Dismiss Handler"]
end

subgraph group_ios["iOS Runtime"]
  node_iosplugin["iOS Plugin"]
  node_iosdelegate["iOS App Delegate"]
end

subgraph group_browser["Browser Runtime"]
  node_browserapi["Browser API<br/>[push.js]"]
  node_serviceworker["Push Worker<br/>[ServiceWorker.js]"]
end

node_app(("Cordova App"))
node_fcmservice{{"FCM"}}
node_apns{{"APNS"}}
node_webpush{{"Browser Push Service"}}

node_app -->|"calls"| node_pushapi
node_pushapi -->|"bridges commands"| node_androidplugin
node_androidplugin -->|"initializes"| node_fcm
node_fcmservice -->|"delivers pushes"| node_fcm
node_fcm -->|"dispatches events"| node_androidplugin
node_androidplugin -->|"returns events"| node_pushapi
node_fcm -->|"launches on tap"| node_androidtap
node_fcm -->|"launches in background"| node_androidbackground
node_fcm -->|"dispatches actions"| node_androidactions
node_fcm -->|"dispatches dismissal"| node_dismissed
node_androidtap -->|"sends extras"| node_androidplugin
node_androidbackground -->|"sends extras"| node_androidplugin
node_androidactions -->|"sends extras"| node_androidplugin
node_dismissed -->|"sends extras"| node_androidplugin
node_pushapi -->|"bridges commands"| node_iosplugin
node_apns -->|"delivers pushes"| node_iosdelegate
node_iosdelegate -->|"forwards push events"| node_iosplugin
node_iosplugin -->|"returns events"| node_pushapi
node_app -->|"calls"| node_browserapi
node_browserapi -->|"registers subscription"| node_webpush
node_webpush -->|"delivers push"| node_serviceworker
node_serviceworker -->|"posts push data"| node_browserapi
node_browserapi -->|"emits events"| node_app

click node_pushapi "https://github.com/havesource/cordova-plugin-push/blob/master/src/js/push.js"
click node_androidplugin "https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/PushPlugin.kt"
click node_fcm "https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/FCMService.kt"
click node_androidtap "https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/PushHandlerActivity.kt"
click node_androidbackground "https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/BackgroundHandlerActivity.kt"
click node_androidactions "https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.kt"
click node_dismissed "https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/PushDismissedHandler.kt"
click node_iosplugin "https://github.com/havesource/cordova-plugin-push/tree/master/src/ios"
click node_iosdelegate "https://github.com/havesource/cordova-plugin-push/blob/master/src/ios/AppDelegate%2BPushPlugin.m"
click node_browserapi "https://github.com/havesource/cordova-plugin-push/blob/master/www/browser/push.js"
click node_serviceworker "https://github.com/havesource/cordova-plugin-push/blob/master/src/browser/ServiceWorker.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_pushapi,node_webpush toneBlue
class node_androidplugin,node_fcm,node_androidtap,node_androidbackground,node_androidactions,node_dismissed toneAmber
class node_iosplugin,node_iosdelegate toneMint
class node_browserapi,node_serviceworker toneRose
class node_app,node_fcmservice,node_apns toneIndigo
```

## Components

### Cordova API

- [Push API](https://github.com/havesource/cordova-plugin-push/blob/master/src/js/push.js): `src/js/push.js`

### Android Runtime

- [Android Plugin](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/PushPlugin.kt): `src/android/com/adobe/phonegap/push/PushPlugin.kt`
- [FCM Service](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/FCMService.kt): `src/android/com/adobe/phonegap/push/FCMService.kt`
- [Tap Handler](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/PushHandlerActivity.kt): `src/android/com/adobe/phonegap/push/PushHandlerActivity.kt`
- [Background Handler](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/BackgroundHandlerActivity.kt): `src/android/com/adobe/phonegap/push/BackgroundHandlerActivity.kt`
- [Action Handler](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.kt): `src/android/com/adobe/phonegap/push/BackgroundActionButtonHandler.kt`
- [Dismiss Handler](https://github.com/havesource/cordova-plugin-push/blob/master/src/android/com/adobe/phonegap/push/PushDismissedHandler.kt): `src/android/com/adobe/phonegap/push/PushDismissedHandler.kt`

### iOS Runtime

- [iOS Plugin](https://github.com/havesource/cordova-plugin-push/tree/master/src/ios): `src/ios`
- [iOS App Delegate](https://github.com/havesource/cordova-plugin-push/blob/master/src/ios/AppDelegate%2BPushPlugin.m): `src/ios/AppDelegate+PushPlugin.m`

### Browser Runtime

- [Browser API](https://github.com/havesource/cordova-plugin-push/blob/master/www/browser/push.js): `www/browser/push.js`
- [Push Worker](https://github.com/havesource/cordova-plugin-push/blob/master/src/browser/ServiceWorker.js): `src/browser/ServiceWorker.js`

### Other components

- **Cordova App**
- **FCM**
- **APNS**
- **Browser Push Service**

## Connections

- Cordova App → Push API: calls
- Push API → Android Plugin: bridges commands
- Android Plugin → FCM Service: initializes
- FCM → FCM Service: delivers pushes
- FCM Service → Android Plugin: dispatches events
- Android Plugin → Push API: returns events
- FCM Service → Tap Handler: launches on tap
- FCM Service → Background Handler: launches in background
- FCM Service → Action Handler: dispatches actions
- FCM Service → Dismiss Handler: dispatches dismissal
- Tap Handler → Android Plugin: sends extras
- Background Handler → Android Plugin: sends extras
- Action Handler → Android Plugin: sends extras
- Dismiss Handler → Android Plugin: sends extras
- Push API → iOS Plugin: bridges commands
- APNS → iOS App Delegate: delivers pushes
- iOS App Delegate → iOS Plugin: forwards push events
- iOS Plugin → Push API: returns events
- Cordova App → Browser API: calls
- Browser API → Browser Push Service: registers subscription
- Browser Push Service → Push Worker: delivers push
- Push Worker → Browser API: posts push data
- Browser API → Cordova App: emits events
