0

我完成了 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。

谢谢

4

1 回答 1

1

问题 #1:请参阅有关 APNS 和网络访问的 Stackoverflow 问题:发送推送通知时出现 Worklight 错误

来自Apple 技术说明:

整个 17.0.0.0/8 地址块分配给 Apple,因此您可以在防火墙规则中指定该范围。

问题 #2:熟悉 APNS 的主题,请参阅这篇博文。

于 2013-04-11T05:15:50.913 回答