Adding a button to the page that prevents pushIDs from being cleared during onunload:
ice.setupPush('vgkhrkfa');
POST /mediacast/javax.faces.resource/listen.icepush.xml.jsf
Cookie: com.icesoft.user-agent=HyperBrowser/1.0; JSESSIONID=D3D49F70A9150E26876EA5D847DBF08B; com.icesoft.user-agent=HyperBrowser/1.0; ice.push.browser=1heq42673; com.icesoft.user-agent=HyperBrowser/1.0; ice.pushids=vxa54j65%20vxa54j68%20vgkhrkfa;
ice.pushid=vxa54j65&ice.pushid=vxa54j68&ice.pushid=vgkhrkfa
GET /mediacast/javax.faces.resource/43785373-60f3-4727-964d-64a3b2a64bed.jsf;jsessionid=D3D49F70A9150E26876EA5D847DBF08B
Cookie: com.icesoft.user-agent=HyperBrowser/1.0; JSESSIONID=D3D49F70A9150E26876EA5D847DBF08B; com.icesoft.user-agent=HyperBrowser/1.0; ice.push.browser=1heq42673; com.icesoft.user-agent=HyperBrowser/1.0; ice.pushids=vxa54j65%20vxa54j68%20vgkhrkfa;
GET /mediacast/javax.faces.resource/43785373-60f3-4727-964d-64a3b2a64bed.jsf;jsessionid=D3D49F70A9150E26876EA5D847DBF08B
User-Agent: stagefright/1.2 (Linux;Android 4.2.1)
POST /mediacast/javax.faces.resource/listen.icepush.xml.jsf
Cookie: com.icesoft.user-agent=HyperBrowser/1.0; JSESSIONID=D3D49F70A9150E26876EA5D847DBF08B; com.icesoft.user-agent=HyperBrowser/1.0; ice.push.browser=1heq42673; com.icesoft.user-agent=HyperBrowser/1.0; ice.pushids=vxa54j65%20vxa54j68%20vgkhrkfa;
ice.pushid=vxa54j65&ice.pushid=vxa54j68&ice.pushid=vgkhrkfa
X-Connection: close
X-Connection-reason: duplicate
POST /mediacast/javax.faces.resource/listen.icepush.xml.jsf
Cookie: com.icesoft.user-agent=HyperBrowser/1.0; JSESSIONID=D3D49F70A9150E26876EA5D847DBF08B; com.icesoft.user-agent=HyperBrowser/1.0; ice.push.browser=1heq42673; com.icesoft.user-agent=HyperBrowser/1.0; ice.pushids=vxa54j65%20vxa54j68%20vgkhrkfa;
ice.pushid=vxa54j65&ice.pushid=vxa54j68&ice.pushid=vgkhrkfa
X-Connection: close
X-Connection-reason: duplicate
(I was originally recording this traffic to analyze the problem; on the last test push appears to continue to function, so it may be due to the device sleeping in between, or just inconsistent testing on my part.)
I have captured http traffic to the Android device with wireshark. Here is the exact scenario, using mediacast
The traffic captured shows:
So the heartbeat continues but the notification never comes.