我正在尝试实现一个向 iPhone 客户端应用程序发送 Apple 推送通知的 Java 程序...找到以下库:Java APNs
提供者代码:
创建了以下代码(来自 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 Push Notification Service Guide 并注意到以下几点:
(1) 在第 15 页,它指出设备令牌与设备 UDID 不同(我目前错误地将其作为 PushNotificationManager.addDevice() 方法中的第二个参数传入(见上文))。
在第 17 页,它指出:
“APNs 使用唯一设备证书中包含的信息生成设备令牌。设备令牌包含设备的标识符。然后它使用令牌密钥加密设备令牌并将其返回给设备。设备将设备令牌返回给请求应用程序作为 NSData 对象。然后应用程序必须以二进制或十六进制格式将设备令牌传递给它的提供者。
iPhone OS 客户端实现
(2) 阅读第 33 - 34 页后,我发现我没有包含使应用程序注册到 APN 的 Objective-C 代码。
我不是 Objective-C 开发人员,所以这是我可以恢复设备代码的地方,还是我必须从证书中获取它?
我从哪里获得设备令牌(抱歉,其他人编写了 Objective-C 客户端应用程序,而我是 Java 开发人员)?
问题):
(1)除了不知道从哪里获取设备令牌和移动客户端代码注册之外,还有什么我没有看过或错过的吗?
(2) 我是否以正确的方式使用 Javapns 库?
感谢您抽出时间来阅读...