ionic-team / ionic-team/capacitor-plugins

PushNotifications.addListener('pushNotificationReceived') is triggered twice for single push notification in iOS 18

Open
#2,196 8 comments 0 reactions 0 assignees View on GitHub
needs reproduction platform: ios
Dominant language
Java
Stars
678
Forks
685
Avg merge
4d 22h
Merged PRs (30d)
3

Description

## Bug Report

### Plugin(s)
@capacitor/push-notifications

### Capacitor Version
💊 Capacitor Doctor 💊

Latest Dependencies:

@capacitor/cli: 6.1.2
@capacitor/core: 6.1.2
@capacitor/android: 6.1.2
@capacitor/ios: 6.1.2

Installed Dependencies:

@capacitor/cli: 6.0.0
@capacitor/core: 6.0.0
@capacitor/android: 6.0.0
@capacitor/ios: 6.1.2

[success] iOS looking great! 👌
[success] Android looking great! 👌

### Platform(s)
iOS

### Current Behavior
PushNotifications.addListener('pushNotificationReceived') event is triggered twice for single push notification in iOS18.
This works fine in Android as well as lower iOS 17.* versions

### Expected Behavior
PushNotifications.addListener('pushNotificationReceived') event to trigger once for single push notification

### Code Reproduction
```
import { PushNotifications } from '@capacitor/push-notifications';

const addListeners = async () => {
await PushNotifications.addListener('registration', token => {
console.info('Registration token: ', token.value);
});

await PushNotifications.addListener('registrationError', err => {
console.error('Registration error: ', err.error);
});

await PushNotifications.addListener('pushNotificationReceived', notification => {
console.log('Push notification received: ', notification);
});

await PushNotifications.addListener('pushNotificationActionPerformed', notification => {
console.log('Push notification action performed', notification.actionId, notification.inputValue);
});
}

const registerNotifications = async () => {
let permStatus = await PushNotifications.checkPermissions();

if (permStatus.receive === 'prompt') {
permStatus = await PushNotifications.requestPermissions();
}

if (permStatus.receive !== 'granted') {
throw new Error('User denied permissions!');
}

await PushNotifications.register();
}

const getDeliveredNotifications = async () => {
const notificationList = await PushNotifications.getDeliveredNotifications();
console.log('delivered notifications', notificationList);
}
```

### Additional Context

Similar behaviour observed for capacitor keyboard events for window addEventListener
```
window.addEventListener('keyboardWillShow', () => {
console.log('addEventListener - keyboardWillShow');
});
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.