iOS推送通知 – JavaPNS – keystore.p12文件安全性

我正在尝试使用Apple的推送通知。 我在这里使用这个教程: http : //www.ibm.com/developerworks/java/library/mo-ios-push/#ibm-pcon

我正在尝试创build推送通知。 示例代码在这里: http : //code.google.com/p/javapns/wiki/PushNotificationBasic ,看起来像这样:

import javapns.Push; public class PushTest { public static void main(String[] args) { Push.alert("Hello World!", "keystore.p12", "keystore_password", false, "Your token"); } } 

除了keystore.p12部分,我已经设置了一切。 以下是关于密钥库的文档:

对象密钥库:对密钥库文件的引用,或者实际的密钥库内容。 请参阅准备证书以获取有关如何创build密钥库的更多信息。 您可以将以下对象传递给此参数:

  • java.io.File:指向您的密钥库文件的直接指针
  • java.lang.String:本地密钥库文件的path
  • java.io.InputStream:一个提供密钥库字节的stream
  • byte []:密钥库的实际字节数
  • java.security.KeyStore:一个实际加载的密钥库

我不只是想在我的电脑上input密钥库的path(就像他们在这里使用Java-PNS发送推送通知到iPhone时发生错误一样),因为我觉得这是不安全的。

我应该使用哪个对象? 我的倾向说使用java.security.KeyStore。

最后需要注意的是,这段代码需要托pipe在Amazon Web Service的Elastic Beanstalk上(如果有的话)。

———编辑1 ————

我试图把理查德J.罗斯三世的代码。 但是在可以学习我的.p12文件设置是否正确之前,我首先需要解决有关JavaPNS(和我相信的文件结构)的问题。 运行下面的代码给了我这个错误: HTTP Status 404 - Servlet IosSendGameServlet is not available 。 当我注释掉所有JavaPNS语句时,出现以下错误: HTTP Status 500 - javax.servlet.ServletException: Parameter recievingAppleDeviceID not found. (因为我没有放入参数)这使我相信JavaPNS被访问的方式存在一个问题。 也许这是在我的文件结构错误的地方? 它和servlet-api(在lib中)是一样的。 也许这是我上传到AWS Elastic Beanstalk服务器的方式的一个问题?

 package com.google.android.gcm.demo.server; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javapns.Push; //<--gets commented out to receive 500 error import javapns.communication.exceptions.CommunicationException;//<--gets commented out to receive 500 error import javapns.communication.exceptions.KeystoreException;//<--gets commented out to receive 500 error public class IosSendGameServlet extends BaseServlet { @Override public void init(ServletConfig config) throws ServletException { super.init(config); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { String recievingAppleDeviceId = getParameter(req, "recievingAppleDeviceID"); String sendingUser = getParameter(req, "sendingUser"); InputStream keyStore = this.getClass().getResourceAsStream("/sasSandbox.p12"); //everything below here gets commented out to receive 500 error try { Push.alert("Game with " + sendingUser + ": It's your turn!", keyStore, "mypassword", false, recievingAppleDeviceId); } catch (CommunicationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (KeystoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

您应该使用InputStream ,并在您的类path中有.p12文件,并使用像这样:

 InputStream keyStore = this.getClass().getResourceAsStream("nameOfMyKeystore.p12");