Java:发送推送通知但未收到

时间:2016-11-17 12:41:15

标签: java ios apple-push-notifications

所以,我正试图从java与APNS沟通。我发现了java-apns,javapns和pushy库。 Java-apns似乎拥有最合适的API。

初​​始化:

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。

3 个答案:

答案 0 :(得分:2)

感谢您提出这个问题。

使用iOS 10时遇到了同样的问题。

如果您使用的是iOS 10或更高版本,则必须启用ON功能中的远程通知。

转到-> Project setting -> capabilities -> Enable Push Notifications.

转到 - &gt; Project setting -> {能力{1}}

更新:

如果您想提交确切的解决方案,请在本地检查如下。

here

下载-> Background Mode -> Enable Remote Notification and VoIp

simplepush.php文件保存在同一目录中。

替换.pem文件名和.pem

打开终端

转到simplepush.php目录。

执行以下命令

simplepush.php

如果您已收到推送,则需要从php simplepush.php 结束检查,否则请检查iOS结束

答案 1 :(得分:1)

(代表OP发布)

我已经解决了,这是我的愚蠢错误!当我期待看到通知时,应用程序处于前台。我关闭它后,通知就开始出现了。

答案 2 :(得分:1)

您是正确的,但未显示通知&#39;通过iOS,如果您的应用程序在前台。但是,通知事件确实发生,如果您的AppDelegate中有正确的方法,iOS将为您提供应用程序处理的通知负载。然后,您可以在后台执行某些操作,或者您可以显示自己的UI(例如,在应用程序中显示带有数字徽章的气球)。

请参阅Apple doc for didReceiveRemoteNotification