aboutsummaryrefslogtreecommitdiff
path: root/juick-notifications/src/main/java/com/juick/components/Notifications.java
diff options
context:
space:
mode:
Diffstat (limited to 'juick-notifications/src/main/java/com/juick/components/Notifications.java')
-rw-r--r--juick-notifications/src/main/java/com/juick/components/Notifications.java30
1 files changed, 29 insertions, 1 deletions
diff --git a/juick-notifications/src/main/java/com/juick/components/Notifications.java b/juick-notifications/src/main/java/com/juick/components/Notifications.java
index b06e0abf..6de648cf 100644
--- a/juick-notifications/src/main/java/com/juick/components/Notifications.java
+++ b/juick-notifications/src/main/java/com/juick/components/Notifications.java
@@ -54,6 +54,7 @@ import javax.inject.Inject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@@ -76,6 +77,8 @@ public class Notifications implements AutoCloseable {
private final ObjectMapper mapper;
+ private final List<String> invalidGCMTokens;
+
@Inject
private ApnsService apns;
@@ -93,6 +96,7 @@ public class Notifications implements AutoCloseable {
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
+ invalidGCMTokens = Collections.synchronizedList(new ArrayList<>());
}
@PostConstruct
@@ -134,7 +138,16 @@ public class Notifications implements AutoCloseable {
MulticastResult result = GCMSender.send(message, regids, 3);
List<Result> results = result.getResults();
for (int i = 0; i < results.size(); i++) {
- logger.info("RES {}: {}", i, results.get(i));
+ Result currentResult = results.get(i);
+ logger.info("RES {}: {}", i, currentResult);
+ List<String> errorCodes = Arrays.asList(Constants.ERROR_MISMATCH_SENDER_ID, Constants.ERROR_NOT_REGISTERED);
+ if (errorCodes.contains(currentResult.getErrorCodeName())) {
+ // assuming results are in order of regids
+ // http://stackoverflow.com/a/11594531/1097384
+ String currentId = regids.get(i);
+ logger.info("{} is scheduled to remove", currentId);
+ addInvalidGCMToken(currentId);
+ }
}
} catch (IOException ex) {
logger.error(ex.getMessage(), ex);
@@ -283,4 +296,19 @@ public class Notifications implements AutoCloseable {
.map(x -> x.getName() + ": " + x.getValue())
.collect(Collectors.joining("\n"));
}
+
+ public void addInvalidGCMToken(String token) {
+ synchronized (invalidGCMTokens) {
+ invalidGCMTokens.add(token);
+ }
+ }
+ public List<String> getInvalidGCMTokens() {
+ return invalidGCMTokens;
+ }
+ public void cleanupGCMTokens() {
+ logger.info("removed {} tokens", invalidGCMTokens.size());
+ synchronized (invalidGCMTokens) {
+ invalidGCMTokens.clear();
+ }
+ }
}