0

Mac でモバイル アプリケーションを開発していますが、Linux で実行しているテスト サーバーに接続します。このサーバーで開発者証明書を使用して APN を有効にしたいのですが、これをインストールすることは可能ですか?テスト サーバーに証明書をインストールするか、Linux マシンにテスト サーバーをセットアップする必要がありますか?

これをもう少し明確にするために:

私の開発マシン: Mac。テストサーバー: liferay 6.0.6 を実行する Linux マシン

プッシュ通知をテストできるように、開発証明書をテスト サーバーにインストールしたいと考えています。

どうもありがとう!

4

2 に答える 2

0

誰かに役立つかもしれないので、私自身の質問に答えたいと思います。まず、生成する必要のある証明書と、デバイストークンの取得方法などの間でひどい混乱がありました。

これらは私がこの仕事をするために行ったステップです:

  • アプリケーションIDを作成しました。
  • 「キーチェーンアクセス」を使用して証明書署名要求を作成し、キーチェーンアクセスを再度使用してインストールしたプッシュ通知の開発証明書を取得しました。
  • 証明書を.p12ファイルとしてエクスポートしました。
  • notnoop javaライブラリ(中央のMavenリポジトリにあります)を使用してプッシュ通知を送信しました。

証明書がどこに収まるかを示すサンプルスニペットを次に示します。

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

メソッドの2番目の引数は、キーチェーンアクセスで設定できるp12ファイルのパスワードです。

最後に、[UIApplication sharedApplication]インスタンスを使用してプッシュ通知を受信するように登録し、AppDelegateにメソッドを実装することで、NSData形式の必要なトークンを取得するため、16進文字列に変換する必要があります(のサンプルコードがあります)多くのサイトとこのサイトの質問でそれ)。

そしてそれはそれです、それはプロセスです。

お役に立てれば!!

于 2012-05-07T03:02:38.417 に答える
0

「liferay」については何も知りませんが、これは証明書を使用して(Railsサーバー上で)APN接続をセットアップする方法です。証明書を .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
于 2012-04-27T14:53:22.837 に答える