我需要向 IOS 设备发送通知,我们使用 Java 作为后端。我正在使用notnoop/java-apns库将通知推送到 IOS 设备。
当我尝试使用生产证书和生产目标推送到 APNS时,出现SocketException:Connection closed by remote host 。
service = APNS.newService()
.withCert(classLoader.getResourceAsStream("files/Production_Certificate.p12"), "password")
.withDelegate(delegate)
.withProductionDestination()
.build();
当我使用开发证书和沙盒目的地时,一切正常,设备收到推送通知。
我尝试使用另一个工具和我们的生产证书推送通知,并且推送已收到,因此证书有效。我不明白出了什么问题。我是在做错什么,还是与网络相关的问题或图书馆出了什么问题?
以下是堆栈跟踪:-
重试 3 次后无法发送消息。Message(Id=1; Token=0557A5BE7EEA5718A1064FC138EEE855BBDDE15FC8C5841CEADBAD2716A42AEC; Payload={"aps":{"alert":{"body":"任务已分配给您。","title": “新任务!”},“声音”:“默认”,“徽章”:1}})java.net.SocketException:连接被远程主机在sun.security.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1490 ) 在 sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) 在 java.io.OutputStream.write(OutputStream.java:75) 在 com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java: 328) 在 com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:312) 在 com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:46) 在 com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:89) 在 com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36) 在 com.mobileinsight.api.service.impl .IOSBroadcastServiceImpl.broadcastNewTaskNotifications(IOSBroadcastServiceImpl.java:125) 在 com.mobileinsight.api.service.impl.IOSBroadcastServiceImpl.broadcastIOSPushNotifications(IOSBroadcastServiceImpl.java:60) 在 com.mobileinsight.api.service.impl.PushNotificationServiceImpl.pushNotificationsInBulk(PushNotificationServiceImpl.java) :29) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang。反射.Method.invoke(Method.java:606) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 在 org.springframework.aop.framework.ReflectiveMethodInvocation 的 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319) .proceed(ReflectiveMethodInvocation.java:150) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 在 org. springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at com.sun.proxy.$Proxy136.pushNotificationsInBulk(Unknown Source) at com.mobileinsight.api.quartz.PushNotificationBatchRunner.doWork(PushNotificationBatchRunner.java:24)在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method. java:606) at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:64) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53) at java.util.concurrent.Executors $RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) at java .util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask。在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread 的 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 运行 (ScheduledThreadPoolExecutor.java:293) .run(Thread.java:745)