diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java b/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java index 2fdb2f5f8..4c6944bcc 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java +++ b/src/main/java/org/whispersystems/textsecuregcm/entities/UnregisteredEvent.java @@ -11,6 +11,9 @@ public class UnregisteredEvent { @NotEmpty private String registrationId; + @JsonProperty + private String canonicalId; + @JsonProperty @NotEmpty private String number; @@ -26,6 +29,10 @@ public class UnregisteredEvent { return registrationId; } + public String getCanonicalId() { + return canonicalId; + } + public String getNumber() { return number; } diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/FeedbackHandler.java b/src/main/java/org/whispersystems/textsecuregcm/push/FeedbackHandler.java index 7ac01f7d5..52ac44051 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/push/FeedbackHandler.java +++ b/src/main/java/org/whispersystems/textsecuregcm/push/FeedbackHandler.java @@ -76,7 +76,13 @@ public class FeedbackHandler implements Managed, Runnable { event.getTimestamp() > device.get().getPushTimestamp()) { logger.info("GCM Unregister Timestamp matches!"); - device.get().setGcmId(null); + + if (event.getCanonicalId() != null && !event.getCanonicalId().isEmpty()) { + logger.info("It's a canonical ID update..."); + device.get().setGcmId(event.getCanonicalId()); + } else { + device.get().setGcmId(null); + } accountsManager.update(account.get()); } }