我完成了 Push 的所有步骤,现在在调用 Push 时,它给出了以下异常。
我正在调用 IBM 的示例推送代码。我可以在数据库中看到设备 ID、令牌、用户 ID,因为用户已成功订阅 Push。
[4/10/13 18:27:24:647 AST] 00000044 JavaScriptInt I com.worklight.integration.js.JavaScriptIntegrationLibraryImplementation log Push Called -----> userId:aahad notificationText:ThisismyPushMessage
[4/10/13 18:27:24:663 AST] 00000044 JavaScriptInt I com.worklight.integration.js.JavaScriptIntegrationLibraryImplementation log submitNotification >> userId :: aahad, text :: ThisismyPushMessage
[4/10/13 18:27:24:679 AST] 00000045 ApnsConnectio W com.notnoop.apns.internal.ApnsConnectionImpl sendMessage Failed to send message com.notnoop.apns.EnhancedApnsNotification@6acb1af9... trying again
java.net.SocketException: Connection closed by remote host
at com.ibm.jsse2.SSLSocketImpl.k(SSLSocketImpl.java:165)
at com.ibm.jsse2.k.write(k.java:30)
at java.io.OutputStream.write(OutputStream.java:69)
at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:161)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:46)
at com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:52)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36)
at com.worklight.integration.notification.apns.ApplicationConnection.sendNotification(ApplicationConnection.java:84)
at com.worklight.integration.notification.apns.APNSMediator.sendNotification(APNSMediator.java:85)
at com.worklight.integration.notification.Mediator$4.run(Mediator.java:174)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
at java.util.concurrent.FutureTask.run(FutureTask.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
从 WL 服务器机器我可以远程登录 Apple 服务器。
还有什么我必须在我的网络上检查的东西吗?因为我的客户有非常严格的证券。
这是我正在使用的推送适配器功能代码。
function testNotification(userId ,notificationText){
WL.Logger.debug("Push Called -----> userId:" + userId + " notificationText:"+notificationText);
var userSubscription =
WL.Server.getUserNotificationSubscription('PushAdapter.PushEventSource', userId);
if (userSubscription==null){
return { result: "No subscription found for user :: " + userId };
}
WL.Logger.debug("submitNotification >> userId :: " + userId + ", text :: " + notificationText);
WL.Server.notifyAllDevices(userSubscription, {
badge: 1,
sound: "sound.mp3",
activateButtonLabel: "ClickMe",
alert: notificationText,
payload: {
foo : 'bar'
}
});
return { result: "Notification sent to user :: " + userId };
}
我已经缩小了这个问题的范围。
我使用码头在我的本地机器(Windows 7 联想笔记本电脑)WL Consumer studio 上进行了 Push 演示,它运行良好。我收到了通知。
我发现我犯了一个错误,即我正在使用带有分发配置文件的开发 APNS 证书....这意味着 WL 服务器将向错误的 Apple 服务器发送请求。
我在我的笔记本电脑上尝试了上面的东西来测试 Push 演示,另外我还在我的个人笔记本电脑上停止了我的防火墙和 Norton 防病毒软件,这样 Push 工作得很好。
现在,今天在客户端,我重新生成了另一个 APNS 证书,即生产 APNS,并使用分发配置文件来实现这一目标。这次我收到了不同的异常。
[4/11/13 12:36:32:566 AST] 00000046 JavaScriptInt I com.worklight.integration.js.JavaScriptIntegrationLibraryImplementation log Push Called -----> userId:aahad notificationText:This is my First Push Message
[4/11/13 12:36:32:566 AST] 00000046 JavaScriptInt I com.worklight.integration.js.JavaScriptIntegrationLibraryImplementation log submitNotification >> userId :: aahad, text :: This is my First Push Message
[4/11/13 12:36:32:676 AST] 0000003b webcontainer E com.ibm.ws.webcontainer.internal.WebContainer handleRequest SRVE0255E: A WebGroup/Virtual Host to handle /favicon.ico has not been defined.
[4/11/13 12:36:58:066 AST] 00000045 ApnsConnectio E com.notnoop.apns.internal.ApnsConnectionImpl socket Couldn't connect to APNS server
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:381)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:243)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:230)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377)
at java.net.Socket.connect(Socket.java:539)
at com.ibm.jsse2.SSLSocketImpl.connect(SSLSocketImpl.java:284)
at com.ibm.jsse2.SSLSocketImpl.<init>(SSLSocketImpl.java:712)
at com.ibm.jsse2.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:15)
at com.notnoop.apns.internal.ApnsConnectionImpl.socket(ApnsConnectionImpl.java:133)
at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:160)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:46)
at com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:52)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36)
at com.worklight.integration.notification.apns.ApplicationConnection.sendNotification(ApplicationConnection.java:84)
at com.worklight.integration.notification.apns.APNSMediator.sendNotification(APNSMediator.java:85)
at com.worklight.integration.notification.Mediator$4.run(Mediator.java:174)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
at java.util.concurrent.FutureTask.run(FutureTask.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
at java.lang.Thread.run(Thread.java:772)
[4/11/13 12:36:58:066 AST] 00000045 ApnsConnectio W com.notnoop.apns.internal.ApnsConnectionImpl sendMessage Failed to send message com.notnoop.apns.EnhancedApnsNotification@4fc0c1a1... trying again
com.notnoop.exceptions.NetworkIOException: java.net.ConnectException: Connection timed out: connect
at com.notnoop.apns.internal.ApnsConnectionImpl.socket(ApnsConnectionImpl.java:146)
at com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:160)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:46)
at com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:52)
at com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36)
at com.worklight.integration.notification.apns.ApplicationConnection.sendNotification(ApplicationConnection.java:84)
at com.worklight.integration.notification.apns.APNSMediator.sendNotification(APNSMediator.java:85)
at com.worklight.integration.notification.Mediator$4.run(Mediator.java:174)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
at java.util.concurrent.FutureTask.run(FutureTask.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
at java.lang.Thread.run(Thread.java:772)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:381)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:243)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:230)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377)
at java.net.Socket.connect(Socket.java:539)
at com.ibm.jsse2.SSLSocketImpl.connect(SSLSocketImpl.java:284)
at com.ibm.jsse2.SSLSocketImpl.<init>(SSLSocketImpl.java:712)
at com.ibm.jsse2.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:15)
at com.notnoop.apns.internal.ApnsConnectionImpl.socket(ApnsConnectionImpl.java:133)
... 13 more
现在有两件事我们必须了解,请帮助。
(1)通过查看 Logs 是否仍然意味着客户端某处存在网络阻塞?
(2)当钥匙串同时显示开发 APNS 和生产 APNS 证书时,我看到它的一个不同之处。两者都使用相同的私钥。开发 apns 证书显示 App ID“us.com.abc.myApp”作为它的后修复.....而生产 apns 证书没有显示它。........这样好吗?还是会引起一些问题?........我尝试重新生成生产 APNS 证书三次,但每次都显示相同的数字而不是 APP ID 作为 Post-fix。
谢谢