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

标签 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 应用程序已在设备上启动。注册本地和远程通知,获取设备 token 并将其发送到服务器。

然后发生了一些事件,我正在发送通知:

static void sendMessage(List<String> tokens, String message) {
    String payload = APNS.newPayload().alertBody(message).build();
    apnsService.push(tokens, payload);
}

每个标记都类似于 "5fb58761f9...4e92465e12"

ApnsDelegate 唯一说的是“消息已发送”,但设备上没有任何反应。而且我认为该消息确实已发送,因为我尝试发送带有损坏 token 的通知,在这种情况下,我收到“消息失败”和一个 throwable,其中包含关于无效 token 的错误。

所以,实际上我什至无法理解问题的根源。但我觉得它是用 Java 编写的,因为与服务器端及其所有 HTTP/2-voodoo-stuff 相比,iOS 部分非常简单。

最佳答案

感谢您提出这个问题。

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

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

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

转到 -> 项目设置 ->capabilities-> 后台模式 -> 启用远程通知和 VoIp

更新:

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

here下载simplepush.php

将您的 .pem 文件保存在同一目录中。

替换您的 .pem 文件名和 simplepush.php

打开终端

转到您的 simplepush.php 目录。

执行以下命令

php simplepush.php

如果你有收到推送则需要从java端检查否则检查到iOS端

关于Java:推送通知已发送但未收到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40655171/

相关文章:

java - org.hibernate.HibernateException : No Session found for current thread 5

java - XML + SQL : Any free standalone tool capable of injecting results of SQL queries into XML?

objective-c - iPhone : change UITableView cells paint order

ios - 在基于 cocos2d 的 iOS 游戏中绘制自定义形状

ios - quickblox 推送通知在生产模式下不起作用

node.js - mocha 中的全局泄漏错误

java - 外部类可以定义为静态并包含内部静态类吗?

java - Newrelic 启动异常

ios - 以编程方式实例化自定义 View Controller 并通过标签获取 subview

ios - UIRemoteNotificationTypeAlert 已弃用 - 我如何在大型团队中过渡到 UIUserNotificationTypeAlert?