Closed GoogleCodeExporter closed 9 years ago
2012-12-26 09:37:14
[javapns.notification.PushNotificationManager]-[DEBUG(JavaPNS standalone
notification thread in QUEUE mode)] Found 0 notifications that must be re-sent
2012-12-26 09:37:14
[javapns.notification.PushNotificationManager]-[DEBUG(JavaPNS standalone
notification thread in QUEUE mode)] No notifications remaining to be resent
2012-12-26 09:37:47
[javapns.notification.PushNotificationManager]-[DEBUG(JavaPNS standalone
notification thread in QUEUE mode)] Reading responses
2012-12-26 09:37:47
[javapns.notification.PushNotificationManager]-[DEBUG(JavaPNS standalone
notification thread in QUEUE mode)] Found 115 notifications that must be re-sent
Original comment by zephyr....@gmail.com
on 26 Dec 2012 at 11:24
The "automatic re-send" feature was created to deal with a rather strange APNS
behavior that was observed a long time ago: during a given connection, any
invalid push notification that triggers an error-response packet apparently
causes APNS to stop processing all push notifications streamed after that first
invalid one. Thus, if an error-response packet was received, we would have to
try again all following notifications.
See http://code.google.com/p/javapns/issues/detail?id=69
If Apple changed the behavior recently, this would have to be confirmed and our
re-send feature would have to be disabled.
Original comment by sype...@gmail.com
on 5 Feb 2013 at 7:43
Are you still experiencing this issue? or is anyone else experiencing it?
Original comment by sype...@gmail.com
on 1 Mar 2013 at 5:20
I have the same problem, when I send a message to the APNS server, but my
iphone APNS two push message is received
Original comment by szf881...@163.com
on 28 Mar 2013 at 3:48
I have same problem too. Some customers says that same notification comes
multiple times but the date+time is old in notification center. Is there any
solution? Or must we disable automatic resend feature for a while
Original comment by erc...@gmail.com
on 8 May 2013 at 7:47
I have the same issue too.
Original comment by gianni.s...@gmail.com
on 8 May 2013 at 7:51
Could you please solve this issue of first priority. Some of our customers are
complaining everyday about old notifications.
Original comment by erc...@gmail.com
on 9 May 2013 at 6:31
Is there an update on this issue? I noticed today that our
NotificationThread's were happily sending away long after the last user had
received their notification. I didn't have detailed enough error logging
turned on in our production servers so I can't say for sure why the threads
were still sending; but this is new behaviour that started in the last week or
two, with no code changes on our side. This issue looked relevant, so I'm
wondering if there's been some investigation and an update?
Original comment by rthor...@gmail.com
on 23 May 2013 at 10:50
I had disabled resend feature, this is a fatal bug!
Original comment by heruim...@gmail.com
on 29 May 2013 at 7:35
Does disabling resend feature solve duplicate sending?
Original comment by erc...@gmail.com
on 29 May 2013 at 9:25
I'm having the same issue. People receiving notifications repeatedly, but not
all users. Most of our reports are that whenever a new notification is sent,
it's received, but then previous notifications reappear as well. Any ideas on
how to fix?
Original comment by chris.mc...@gmail.com
on 23 Aug 2013 at 6:53
Is there a solution to this bug yet, except disabling resend feature?
Its a high priority bug in my app and needs to be fixed asap.
Original comment by sicilia...@gmail.com
on 17 Oct 2013 at 3:08
The Error Handling and resending feature is causing the duplicate pushes.
Notifications with a exception will trigger a resend off all following messages.
Instead only notifications with an apple response should trigger a resend of
the following messages.
Testcase to reproduce the problem:
package javapns.test;
import org.json.JSONException;
import javapns.Push;
import javapns.communication.exceptions.CommunicationException;
import javapns.communication.exceptions.KeystoreException;
import javapns.devices.Device;
import javapns.devices.Devices;
import javapns.devices.exceptions.InvalidDeviceTokenFormatException;
import javapns.devices.implementations.basic.BasicDevice;
import javapns.notification.AppleNotificationServer;
import javapns.notification.AppleNotificationServerBasicImpl;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;
import javapns.notification.PushedNotification;
import javapns.notification.PushedNotifications;
import javapns.notification.transmission.NotificationProgressListener;
import javapns.notification.transmission.NotificationThread;
import javapns.notification.transmission.NotificationThreads;
public class DuplicateTest extends TestFoundation implements
NotificationProgressListener {
/**
* Execute this class from the command line to run tests.
*
* @param args
* @throws KeystoreException
* @throws JSONException
* @throws InvalidDeviceTokenFormatException
* @throws InterruptedException
*/
public static void main(String[] args) throws Exception {
/* Verify that the test is being invoked */
if (!verifyCorrectUsage(DuplicateTest.class, args, "keystore-path", "keystore-password", "token")) return;
/* Initialize Log4j to print logs to console */
configureBasicLogging();
test(args);
}
private PushNotificationManager notificationManager;
private AppleNotificationServer server;
private int counter = 0;
private NotificationThread thread;
private DuplicateTest(String keystore, String password) throws KeystoreException, CommunicationException {
server = new AppleNotificationServerBasicImpl(keystore, password, false);
notificationManager = new PushNotificationManager();
notificationManager.initializeConnection(server);
thread = (NotificationThread) Push.queue(keystore, password, false, 1);
thread.start();
}
private static void test(String[] args) throws KeystoreException, JSONException, InterruptedException, InvalidDeviceTokenFormatException {
try {
DuplicateTest test = new DuplicateTest(args[0], args[1]);
test.sendExceptionNotification();
Thread.sleep(1000);
for (int i = 0; i < 2; i++) {
test.sendNotification(args[2]);
}
Thread.sleep(1000);
test.sendInvalidNotification();
Thread.sleep(1000);
for (int i = 0; i < 2; i++) {
test.sendNotification(args[2]);
}
Thread.sleep(1000);
test.restartConnection();
} catch (Exception e) {
System.out.println(" [ERROR]: Exception " + e);
}
}
public void restartConnection() {
try {
thread.getPushedNotifications(true);
//notificationManager.restartConnection(server);
} catch (Exception e) {
System.out.println(" [ERROR]: Exception " + e);
}
}
//
public void sendNotification(String token) throws JSONException, InvalidDeviceTokenFormatException, CommunicationException {
int messageId = counter++;
PushNotificationPayload payload = PushNotificationPayload.complex();
System.out.println(" [SEND]: Notification Nr: " + messageId);
payload.addAlert("Notification Nr: " + messageId);
Device device = new BasicDevice(token);
thread.add(payload, device);
//notificationManager.sendNotification(device, payload, false, messageId);
}
//6daca462dc30e6621b3e2886e176d6fa7f641e04741961a510a906b7dd51ae7b
public void sendInvalidNotification() throws JSONException, InvalidDeviceTokenFormatException, CommunicationException {
int messageId = counter++;
PushNotificationPayload payload = PushNotificationPayload.complex();
System.out.println(" [SEND]: Invalid Notification ");
payload.addAlert("Invalid Notification: " + messageId);
Device device = new BasicDevice("123456789012345678901234567890123456789012345678901234567" + (1000000));
thread.add(payload, device);
//notificationManager.sendNotification(device, payload, false, messageId);
}
public void sendExceptionNotification() throws JSONException, InvalidDeviceTokenFormatException, CommunicationException {
int messageId = counter++;
PushNotificationPayload payload = PushNotificationPayload.complex();
System.out.println(" [SEND]: Exception Notification ");
payload.addAlert("Exception Notification: " + messageId);
Device device = new BasicDevice("123456789012345678901234567890123456789012345678901234567XXXXXXXX", false);
thread.add(payload, device);
//notificationManager.sendNotification(device, payload, false, messageId);
}
public void readStatus() {
}
public void eventThreadStarted(NotificationThread notificationThread) {
System.out.println(" [EVENT]: thread #" + notificationThread.getThreadNumber() + " started");
}
public void eventThreadFinished(NotificationThread thread) {
System.out.println(" [EVENT]: thread #" + thread.getThreadNumber() + " finished: pushed messages #" + thread.getFirstMessageIdentifier() + " to " + thread.getLastMessageIdentifier());
}
public void eventConnectionRestarted(NotificationThread thread) {
System.out.println(" [EVENT]: connection restarted in thread #" + thread.getThreadNumber());
}
public void eventAllThreadsStarted(NotificationThreads notificationThreads) {
System.out.println(" [EVENT]: all threads started: " + notificationThreads.getThreads().size());
}
public void eventAllThreadsFinished(NotificationThreads notificationThreads) {
System.out.println(" [EVENT]: all threads finished: " + notificationThreads.getThreads().size());
}
public void eventCriticalException(NotificationThread notificationThread, Exception exception) {
System.out.println(" [EVENT]: critical exception occurred: " + exception);
}
}
Original comment by S.Yasar...@gmail.com
on 25 Mar 2014 at 9:46
Hello guys,
I spotted a lot of duplicated messages received through APN yesterday(through
our direct observation and customer feedback). We're using javapns 2.2 to send
push messages. And I haven't touched our code or service for months.
Do you have any insight on what might be going on?
Thanks for any input.
Daolong Wang
Original comment by ahlon...@gmail.com
on 1 Apr 2014 at 4:07
Hi, here we are experiencing the resend as well. We have a bulk of
notifications, several has invalid token, as result the devices with the valid
token get several duplication.
I understand that in a push were an error occurred there the following devices
will not be reached.
As such there is a need for the resend, I would prefer of course that only the
following in the list will be sent, but if this not possible I would like the
option to disable the resend.
Is there a way to configure the javapns to disable resend??
Original comment by kohen.sh...@gmail.com
on 25 Jun 2014 at 12:01
S.Yasar...@gmail.com is correct.
I tried his code and it is indeed sending duplicate notifications.
We need to change to code to include the fact that the successive notifications
need not be resent in case the notification transmission
(notification.isTransmissionCompleted()) has been unsuccessful.Because
notifications succeeding such a notification shall be properly processed by
APNS in case they have been successfully transmitted.
Original comment by ram...@limeroad.com
on 10 Jul 2014 at 1:21
See issue #187
Original comment by sype...@gmail.com
on 30 Sep 2014 at 3:27
Original issue reported on code.google.com by
zephyr....@gmail.com
on 26 Dec 2012 at 11:00