所以,我试图从Java与APNS进行通信。我找到了java-apns,javapns和pushy库。 Java-apns似乎拥有最充足的API。Java:推送通知但未收到
初始化:
public static void main(String[] args) {
String certificateFilePath = args[0]; // "/path/to/cert.p12"
apnsService = APNS.newService()
.withCert(certificateFilePath, Config.APNS_PROVIDER_CERTIFICATE_PASSWORD)
.withDelegate(new ApnsDelegate() {
@Override
public void messageSent(ApnsNotification apnsNotification, boolean b) {
System.out.println("message sent");
}
@Override
public void messageSendFailed(ApnsNotification apnsNotification, Throwable throwable) {
System.out.println("message failed");
}
@Override
public void connectionClosed(DeliveryError deliveryError, int i) {
System.out.println("connection closed");
}
@Override
public void cacheLengthExceeded(int i) {
System.out.println("cache length exceeded");
}
@Override
public void notificationsResent(int i) {
System.out.println("notification resent");
}
})
.withSandboxDestination()
.build();
...
}
此时iOS应用在设备上启动。本地和远程通知已注册,设备令牌已获取并发送到服务器。
然后一些事件发生,我发送通知:
static void sendMessage(List<String> tokens, String message) {
String payload = APNS.newPayload().alertBody(message).build();
apnsService.push(tokens, payload);
}
每个令牌是一样的东西"5fb58761f9...4e92465e12"
。
ApnsDelegate说的唯一的东西是“消息发送”,但设备上没有任何反应。我认为这条消息是真正发送的,因为我试图发送带有损坏的令牌的通知,在这种情况下,我收到“消息失败”,并提示有关无效令牌的错误。
所以,其实我甚至不明白我的问题的起源。但是我觉得它是用Java编写的,因为iOS部分非常简单,与服务器端相比,它的所有HTTP/2-voodoo-stuff都是。
哪款iPhone OS? – iMHitesh
@Hiteshsurani,我使用iOS10在设备上进行测试,但我的部署目标是8.0 – seelts
如果12K用户(如@RadLexus)的编辑不符合您的喜好,那么可能值得让他们询问编辑的目的。在这种情况下,这是非常正确的 - 我们不使用[解决]标题攻击,也没有解决方案的答案。总是把它们放在一个答案中,我已经在下面为你做了答案。 – halfer