通过 Java 使用 Apple 推送通知服务

2024-01-04

我正在尝试实现一个向 iPhone 客户端应用程序发送 Apple 推送通知的 Java 程序...找到以下库:Java APN http://code.google.com/p/javapns/

提供商代码:

创建了以下代码(来自 Javapns)以在我的应用程序中使用:

try {
    PayLoad payLoad = new PayLoad();

    payLoad.addAlert("My alert message");
    payLoad.addBadge(45);
    payLoad.addSound("default");

    PushNotificationManager pushManager = PushNotificationManager.getInstance();
    pushManager.addDevice("iPhone", "f4201f5d8278fe39545349d0868a24a3b60ed732");
    log.warn("Initializing connectiong with APNS...");

    // Connect to APNs
    pushManager.initializeConnection(HOST, PORT, 
                                 "/etc/Certificates.p12", "password", 
    SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);

    Device client = pushManager.getDevice("Lambo");

    // Send Push
    log.warn("Sending push notification...");
    PushNotificationManager.getInstance().sendNotification(client, payLoad);
 }
 catch (Exception e) {
    throw new ApnsPushNotificationException("Unable to send push " + e);
 }

当我运行这个应用程序时(正如您可以通过 Log4j 语句看到的),没有发生任何异常:

  WARN  [MyCode] Initializing connectiong with APNS...
  WARN  [MyCode] Sending push notification...

但我的客户端应用程序没有收到任何通知!

IDPP 注册流程:

此外,还在 iPhone 开发者计划门户 (IDPP) 上执行了以下操作:

  • 创建基于 APNS 的 SSL 证书和密钥

  • 创建并安装配置文件

  • 在服务器上安装 SSL 证书和密钥。

已多次阅读 Apple 推送通知服务指南并注意到以下几点:

(1) 在第 15 页,它指出设备令牌与设备 UDID 不同(我当前错误地将其作为 PushNotificationManager.addDevice() 方法中的第二个参数传递(见上文))。

第 17 页指出:

“APNs 使用唯一设备证书中包含的信息生成设备令牌。设备令牌包含设备的标识符。然后,它使用令牌密钥加密设备令牌并将其返回给设备。设备将设备令牌返回给请求应用程序作为 NSData 对象。然后应用程序必须以二进制或十六进制格式将设备令牌传递给其提供者。”

iPhone操作系统客户端实现

(2) 阅读第 33 - 34 页后,我发现我没有包含让应用程序向 APN 注册的 Objective-C 代码。

我不是 Objective-C 开发人员,那么这是我可以恢复设备代码的地方还是我必须从证书中获取它?

我在哪里获取设备令牌(抱歉,其他人编写了 Objective-C 客户端应用程序,而我是 Java 开发人员)?

问题):

(1)除了不知道从哪里获取设备令牌和手机客户端代码注册之外,还有什么我没有看过或遗漏的吗?

(2) 我是否以正确的方式使用 Javapns 库?

感谢您抽出时间来阅读...


作为可耻的自我广告,我鼓励使用java-apns http://github.com/notnoop/java-apns图书馆。您的代码将如下所示:

ApnsService service =
     APNS.newService()
     .withCert("/etc/Certificates.p12", "password")
     .withSandboxDestination() // or .withProductionDestination()
     .build();

String payload =
    APNS.newPayload()
    .alertBody("My alert message")
    .badge(45)
    .sound("default")
    .build();

String deviceToken = "f4201f5d8278fe39545349d0868a24a3b60ed732";

log.warn("Sending push notification...");
service.push(deviceToken, payload);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Java 使用 Apple 推送通知服务 的相关文章

随机推荐