苹果在java、linux开发机中的推送通知服务



我正在使用 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 )
    " #{token}#{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 = " #{tokenBinary}#{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。
  • 使用"钥匙串访问
  • "创建了一个证书签名请求,并获得了我再次使用钥匙串访问安装的推送通知的开发证书。
  • 将证书导出为 .p12 文件。
  • 使用 notnoop java 库(位于中央 maven 存储库上(发送推送通知。

下面是一个示例代码段,显示了证书的适用位置:

ApnsService service =
    APNS.newService()
    .withCert("/path/to/certificate.p12", "MyCertPassword")
    .withSandboxDestination()
    .build(); 

该方法的第二个参数是钥匙串访问允许您设置的 p12 文件的密码。

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

就是这样,就是这个过程。

希望这有帮助!!

最新更新