Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java、linux开发机器中的Apple推送通知服务_Java_Ios_Linux_Ssl_Apple Push Notifications - Fatal编程技术网

java、linux开发机器中的Apple推送通知服务

java、linux开发机器中的Apple推送通知服务,java,ios,linux,ssl,apple-push-notifications,Java,Ios,Linux,Ssl,Apple Push Notifications,我正在用mac开发一个移动应用程序,但它连接到我在linux上运行的测试服务器,我想用开发者证书在这个服务器上启用APN,问题是,是否可以在我的测试服务器上安装这个证书,或者我必须在我的linux机器上安装测试服务器 为了让这一点更清楚一点: 我的开发机器:Mac。 测试服务器:运行liferay 6.0.6的linux机器 我想在测试服务器上安装开发证书,以便测试推送通知 非常感谢 我对“liferay”一无所知,但这就是我如何使用证书在Rails服务器上设置APN连接的方法。请注意,您需要使

我正在用mac开发一个移动应用程序,但它连接到我在linux上运行的测试服务器,我想用开发者证书在这个服务器上启用APN,问题是,是否可以在我的测试服务器上安装这个证书,或者我必须在我的linux机器上安装测试服务器

为了让这一点更清楚一点:

我的开发机器:Mac。 测试服务器:运行liferay 6.0.6的linux机器

我想在测试服务器上安装开发证书,以便测试推送通知


非常感谢

我对“liferay”一无所知,但这就是我如何使用证书在Rails服务器上设置APN连接的方法。请注意,您需要使用“openssl pkcs12-in-myfile.p12-out-myfile.pem”将证书转换为.pem文件:

  @@apn_cert       = nil
  APN_SSL_KEY_FILE = 'lib/SSLCert_Private_Key.pem'
  APN_SSL_HOST     = 'gateway.sandbox.push.apple.com'
  #  APN_SSL_HOST     = 'gateway.push.apple.com'
  APN_SSL_PORT     = 2195
  APN_SSL_PASSWORD = '<password>'

  def configure_apn_cert
    puts "APN Service: Configuring APN cert"
    @@apn_cert         = File.read(File.join(RAILS_ROOT, APN_SSL_KEY_FILE))
    @@apn_context      = OpenSSL::SSL::SSLContext.new
    @@apn_context.key  = OpenSSL::PKey::RSA.new(@@apn_cert, APN_SSL_PASSWORD)
    @@apn_context.cert = OpenSSL::X509::Certificate.new(@@apn_cert)
  end

  def create_and_configure_apn_server
    configure_apn_cert if not @@apn_cert
    puts "APN Service: Configuring APN SOCKET and SSL connection"
    @apn_socket       = TCPSocket.new(APN_SSL_HOST, APN_SSL_PORT)
    @apn_ssl          = OpenSSL::SSL::SSLSocket.new(@apn_socket, @@apn_context)
    @apn_ssl.sync     = true
    @apn_ssl.connect
  end

  def close_apn_server
    @apn_ssl.close
    @apn_socket.close
  end

  def package_build_for_apn( token, content )
    "\0\0 #{token}\0#{content.length.chr}#{content}"
  end

  def package_send_to_apn( package )
    puts "APN Service: Sending #{package}"
    bytes_written = @apn_ssl.write( package )

    if bytes_written != package.length then
      puts "APN Service: SSL write failed"
      package_to_apn_show_write( bytes_written, package)
    end
  end

  def apn_deliver_payload( token, payload )
    # Convert the device string back into a byte string
    tokenBinary = Base64.decode64( token )

    # Transform the payload into an APN byte string
    apn_content      = payload.to_hash.to_json
    apn_content_len  = apn_content.length

    # Build the apn_package per APN specification
    apn_package = "\0\0 #{tokenBinary}\0#{apn_content_len.chr}#{apn_content}"

    # Actually send it.
    package_send_to_apn( apn_package )
  end

  def package_to_apn_show_write( bytes, package)
    puts "Wrote: #{bytes_written}/ Tried: #{package.length}"
    puts "Package: '#{package}'"
  end

  def package_to_apn_debug( token, content, package )
    puts "Token(#{token.length}): #{token}"
    puts "Content(#{content.length}): #{content}"
    puts "Package(#{package.length}): #{package}"
  end

我想回答我自己的问题,因为这可能会对某些人有所帮助。首先,我对我需要生成的证书和如何获取设备令牌以及其他事情感到非常困惑

以下是我完成这项工作的步骤:

创建了一个应用程序ID。 使用Keychain access创建了一个证书签名请求,并获得了推送通知的开发证书,我再次使用Keychain access安装了该证书。 将证书导出为.p12文件。 使用位于maven中央存储库中的notnoop java库发送推送通知。 以下是一个示例代码段,显示了证书的适用范围:

ApnsService service =
    APNS.newService()
    .withCert("/path/to/certificate.p12", "MyCertPassword")
    .withSandboxDestination()
    .build(); 
该方法的第二个参数是keychain access让您设置的p12文件的密码

最后,为了粘合东西,我使用[UIApplication sharedApplication]实例注册以接收推送通知,通过在AppDelegate上实现一个方法,我获得了所需的令牌,它是NSData格式的,因此您需要将其转换为十六进制字符串。在许多站点和本站点的问题中都有此示例代码

就这样,这就是过程


希望这有帮助

对于您的测试服务器开发,您使用的是什么语言?Java,事实上它是一个liferay应用程序,我在其中添加了Jersey[您的问题不清楚]“测试服务器”是否已经在linux机器上,而您只是想添加APN通知的证书,还是服务器在其他地方?只是编辑以回答您的问题:我将尝试将其翻译为java,并告诉您它是如何运行的