java - java、linux开发机苹果推送通知服务

标签 java ios linux ssl apple-push-notifications

我正在使用 mac 开发移动应用程序,但它连接到我在 linux 上运行的测试服务器,我想使用开发人员证书在此服务器上启用 APN,问题是,是否可能在我的测试服务器上安装此证书,还是我必须在我的 Linux 机器上设置测试服务器?

为了更清楚一点:

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

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

非常感谢!

最佳答案

我对“liferay”一无所知,但这是我如何使用证书设置 APN 连接(在 Rails 服务器上)。请注意,您需要将证书转换为 .pem 文件(使用“openssl pkcs12 -in myfile.p12 -out myfile.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

关于java - java、linux开发机苹果推送通知服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10350792/

相关文章:

linux - 在 Fedora 25 上使用 LD_PRELOAD 导致 Segmentation Fault

linux - 如何解决 Sphinx 搜索依赖问题?

linux - 如何在 Linux 上从 .so 中继承 C++ 类?

java - 如何获取多个文件

java - ListView 滞后于音乐专辑图片

java - 理解java swing的困难

ios - 如何将 deviceToken 字符串传递给 'webViewDidFinishLoad' ?

java - 我无法使用 javamailAPI 程序检查我的电子邮件?

ios - 在 iOS 中获取按钮的颜色

ios - FaSTLane:将设备添加到配置的正确方法?