Discard APNs tokens if the APNs server reports that the token is expired

This commit is contained in:
Jon Chambers 2024-07-08 13:12:26 -04:00 committed by Jon Chambers
parent 775889c0b6
commit 02b9ceb4c7
2 changed files with 6 additions and 5 deletions

View File

@ -167,7 +167,7 @@ public class APNSender implements Managed, PushNotificationSender {
} else { } else {
accepted = false; accepted = false;
rejectionReason = response.getRejectionReason(); rejectionReason = response.getRejectionReason();
unregistered = response.getRejectionReason().map(reason -> "Unregistered".equals(reason) || "BadDeviceToken".equals(reason)) unregistered = response.getRejectionReason().map(reason -> "Unregistered".equals(reason) || "BadDeviceToken".equals(reason) || "ExpiredToken".equals(reason))
.orElse(false); .orElse(false);
} }

View File

@ -133,11 +133,12 @@ class APNSenderTest {
verifyNoMoreInteractions(apnsClient); verifyNoMoreInteractions(apnsClient);
} }
@Test @ParameterizedTest
void testUnregisteredUser() { @ValueSource(strings = {"Unregistered", "BadDeviceToken", "ExpiredToken"})
void testUnregisteredUser(final String rejectionReason) {
PushNotificationResponse<SimpleApnsPushNotification> response = mock(PushNotificationResponse.class); PushNotificationResponse<SimpleApnsPushNotification> response = mock(PushNotificationResponse.class);
when(response.isAccepted()).thenReturn(false); when(response.isAccepted()).thenReturn(false);
when(response.getRejectionReason()).thenReturn(Optional.of("Unregistered")); when(response.getRejectionReason()).thenReturn(Optional.of(rejectionReason));
when(apnsClient.sendNotification(any(SimpleApnsPushNotification.class))) when(apnsClient.sendNotification(any(SimpleApnsPushNotification.class)))
.thenAnswer( .thenAnswer(
@ -160,7 +161,7 @@ class APNSenderTest {
assertThat(notification.getValue().getPriority()).isEqualTo(DeliveryPriority.IMMEDIATE); assertThat(notification.getValue().getPriority()).isEqualTo(DeliveryPriority.IMMEDIATE);
assertThat(result.accepted()).isFalse(); assertThat(result.accepted()).isFalse();
assertThat(result.errorCode()).hasValue("Unregistered"); assertThat(result.errorCode()).hasValue(rejectionReason);
assertThat(result.unregistered()).isTrue(); assertThat(result.unregistered()).isTrue();
} }