我正在使用mac开发一个移动应用程序,但它连接到我在linux上运行的测试服务器,并且我想使用开发人员证书在此服务器上启用APN,问题是,是否可以在我的测试服务器上安装此证书,或者我必须在我的linux机器上设置测试服务器?
为了让这一点更清楚一点:
我的开发机器:一台Mac。测试服务器:一台运行liferay 6.0.6的linux机器
我想在测试服务器上安装开发证书,这样我就可以测试推送通知。
非常感谢!
发布于 2012-05-07 11:02:38
我想回答我自己的问题,因为它可能对某些人有帮助,首先,我在需要生成的证书和如何获得设备令牌等其他事情之间存在严重的混淆。
以下是我完成这项工作所经历的步骤:
下面是一个示例代码片段,显示了证书的适用位置:
ApnsService service =
APNS.newService()
.withCert("/path/to/certificate.p12", "MyCertPassword")
.withSandboxDestination()
.build(); 该方法的第二个参数是密钥链访问使您设置的p12文件的密码。
最后,我使用[UIApplication sharedApplication]实例注册以接收推送通知,并通过在AppDelegate上实现一个方法来获取所需的令牌,该令牌是NSData格式的,因此您需要转换为十六进制字符串(此站点上的许多站点和问题中都有相应的示例代码)。
就是这样,这就是过程。
希望这能有所帮助!!
发布于 2012-04-27 22:53:23
我对'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}"
endhttps://stackoverflow.com/questions/10350792
复制相似问题