iOS的推送通知 - JavaPNS - keystore.p12文件安全(iOS Push

2019-09-21 04:42发布

我试图使用苹果的推送通知。 我在这里使用本教程: http://www.ibm.com/developerworks/java/library/mo-ios-push/#ibm-pcon

我在哪里,我试图创建推送通知的部分。 示例代码是在这里: 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一部分。 这里是什么文件说,有关密钥库:

对象密钥库:引用到密钥存储文件,或实际密钥库的内容。 请参阅准备证书有关如何创建一个密钥存储更多的信息。 您可以通过以下对象来此参数:

  • java.io.File的:直接指向密钥存储文件
  • java.lang.String中:到本地密钥库文件的路径
  • 的java.io.InputStream:流从密钥库提供所述字节
  • 字节[]:一个密钥库的实际字节
  • java.security.KeyStore中:实际加载密钥库

我不只是想在我的计算机上的密钥库的路径输入(因为他们在这里得到错误,而使用Java的PNS发送推送通知到iPhone? ),因为我觉得这样是不安全的。

我应该使用哪个对象? 我倾向于认为使用java.security.KeyStore中。

最后一点,需要在亚马逊Web服务的Elastic青苗被托管(如果该事项)这个代码。

---------编辑1 ------------

我曾试图把理查德·罗斯三世的代码。 但在此之前,可以学习,如果我的.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弹性魔豆服务器的方式有问题?

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();
            }

    }
}

Answer 1:

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

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


文章来源: iOS Push Notification - JavaPNS - keystore.p12 file security