Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
mdivya-symplr opened this issue Sep 18, 2024 · 3 comments

Comments

@mdivya-symplr
Copy link

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');
    });
@mdivya-symplr
Copy link
Author

With further investigation it seems like willPresent method is being triggered twice in iOS 18 and there is a open issue for it - https://forums.developer.apple.com/forums/thread/761597?answerId=799771022#799771022
They are suggesting workaround to use UNNotificationRequest.identifier or UNNotificationContent.threadIdentifier.
When can we expect fix for this from capacitor side? or Any suggestions further on this?

@Ionitron
Copy link
Collaborator

This issue needs more information before it can be addressed.
In particular, the reporter needs to provide a minimal sample app that demonstrates the issue.
If no sample app is provided within 15 days, the issue will be closed.

Please see the Contributing Guide for how to create a Sample App.

Thanks!
Ionitron 💙

@marcoagsa
Copy link

I'm having the same problem! 😱

Captura de ecrã 2024-10-23, às 13 24 25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants