---
# System prepended metadata

title: Push Notifications

---

# Push Notifications

```mermaid
sequenceDiagram
    participant EU as End User
    participant I as Issuer
    participant V as Verifier
    participant M as Mediator
    participant H as Mobile App (holder)
    participant PNG as Push Notification Gateway (Firebase)
    participant PNS as Push Notification Service (OS)
    
    H -->> M: Connects
    rect rgb(255, 165, 0)
    M -->>+ EU: Proactive Disclosure Screen
    end
    M -->> EU: Request Permission to Send/receive Notifications
    EU -->>-M:  Accept/Reject
    rect rgb(255, 165, 0)
    H -->>+ M: Send: Enable Push Notification (title, message, lang)
    M -->>- H: Send: Enable Push Notification Response()
    end
    rect rgb(255, 165, 0)
        H -->>+ M: Support Push Notification feature?
        M -->>- H: Yes/No
    end
    M -->> M: Generate Firebase Token()
    Note right of M: in iOS, Missing enable push notification capability at build time
    H -->>+ M: Send: Set Device Info (Firebase Generated Token)
    M -->>- H: Send: Set Device Info Response()

    alt Message from Issuer
        I -->>M: Send DIComm Message
    else Message from Verifier
        V -->>M: Send DIComm Message
    end
    
    M -->>M: Check if connection keys has push notification enabled
    M -->>M: Has a message been sent recently (5min)?
    M -->>PNG: Send Push Notification (title, message)
    PNG -->>M:  Accepted? Yes/No
    rect rgb(255, 165, 0)
    H -->>+ M: Send: Disable Push Notification (title, message, lang)
    M -->>- H: Send: Disable Push Notification Response()
    end
    
    PNS --> M: Send Notification
    M --> M: Process Notification (as Background or Foreground)
    alt if background
        M -->>M: Emit OS push notificaiton
        EU -->> M: Open Notification
        M -->> M: Open the Wallet
        rect rgb(255, 165, 0)
            M -->> M: Go to home scrreen
        end
    else if foreground
        M -->>M: Do Nothing
        Note right of M: What if user is NOT in the home screen?
    end    
```
## References
- https://github.com/hyperledger/aries-rfcs/blob/main/features/0699-push-notifications-apns/README.md
- https://github.com/hyperledger/aries-mediator-service/pull/93
- https://github.com/bcgov/bc-wallet-mobile/pull/1389
- https://github.com/hyperledger/aries-mobile-agent-react-native/pull/924
- 
