首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java,linux开发机中的苹果推送通知服务

java,linux开发机中的苹果推送通知服务
EN

Stack Overflow用户
提问于 2012-04-27 20:40:40
回答 2查看 1.8K关注 0票数 0

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

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

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

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

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-07 11:02:38

我想回答我自己的问题,因为它可能对某些人有帮助,首先,我在需要生成的证书和如何获得设备令牌等其他事情之间存在严重的混淆。

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

  • 创建了一个应用程序ID。
  • 使用"Keychain access“创建了证书签名请求,并获得了推送通知的开发证书,我再次使用Keychain access.
  • Exported将证书安装为.p12文件。
  • 使用notnoop库(位于中央maven存储库)来发送推送notifications.

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

代码语言:javascript
复制
ApnsService service =
    APNS.newService()
    .withCert("/path/to/certificate.p12", "MyCertPassword")
    .withSandboxDestination()
    .build(); 

该方法的第二个参数是密钥链访问使您设置的p12文件的密码。

最后,我使用[UIApplication sharedApplication]实例注册以接收推送通知,并通过在AppDelegate上实现一个方法来获取所需的令牌,该令牌是NSData格式的,因此您需要转换为十六进制字符串(此站点上的许多站点和问题中都有相应的示例代码)。

就是这样,这就是过程。

希望这能有所帮助!!

票数 0
EN

Stack Overflow用户

发布于 2012-04-27 22:53:23

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

代码语言:javascript
复制
  @@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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10350792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档