1

これに関連するほとんどすべてのスレッドをstackoverflowで調べましたが、よく理解していなかったため、あまり役に立ちませんでした。PHPコードを使用してプッシュ通知を送信すると、接続に失敗しましたと表示されます。以前、他の多くのプロジェクトで同じコードを使用しました。しかし、今回は問題がどこにあるかを見つけることができません

PHP コード

  $status_message="Failure"; 
  $deviceToken = "";
  $userExist=1;
  $message = 'You Recieved a new Notifcation from test';
  $badge = (int)1;
  $sound = 'cow.caf';

  $body = array();
  if($userExist==1) 
  {
      $body['aps'] = array('alert' => $message);
      $body['aps']['sound'] = $sound;
     if(isset($badge)) 
   {
    $body['aps']['badge'] = $badge;
    }
     else
    {
    $body['aps']['message'] = $message;
    }

   }

    $ctx = stream_context_create();
    stream_context_set_option($ctx,'ssl','local_cert','apns-dev.pem');
    stream_context_set_option($ctx,'ssl','verify_peer',false);
    $fp = @stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', 
     $err,$errstr, 60, "STREAM_CLIENT_CONNECT", $ctx);
   if (!$fp) 
    {
       print "Failed to connect $err $errstr\n";
       print_r($err);
       return;
    }
  else 
    {
      print "Connection OK\n";
    }

iPhone 終了

0 0 の接続に失敗しました。iPhone の担当者と会話したところ、PEM が正しいとのことでした。これも考えられる理由の 1 つです。しかし、彼らは最後にテストし、最後にプッシュが来ています。彼らは自分たちが正しいと確信しています。PEM ファイルはサーバーの正しい場所にあります。

次にサーバー設定です。tcp 2195,2196 が有効になっています。

サーバーエンド

root@servername [~]# openssl version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
root@servername [~]# iptables -nL | grep 2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2195
root@servername [~]# iptables -nL | grep 2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2196

PUTTY で telnet gateway.push.apple.com 2195 を検証しようとしましたが、サーバーから接続しています。

どこに問題があるのか​​ わかりません。6 つのプロジェクトで同じファイルを使用したので、コードについては確信があります。私のホスティングはVPSです

助けてください

4

1 に答える 1

2

最後に、Google APNS ライブラリを使用してこれを行うことができました。私の以前のコードは 6 つのプロジェクトで正常に動作していましたが、このドキュメントを読んだとき

http://developer.apple.com/library/mac/#technotes/tn2265/_index.html

iOS プロビジョニング ポータルまたは Mac 開発者証明書ユーティリティによって作成された SSL ID (証明書および関連する秘密鍵) に加えて、Entrust CA (2048) ルート証明書をプロバイダーの列の問題の接続の下にもインストールする必要があることがわかりました
プッシュ サービス

https://www.entrust.net/downloads/binary/entrust_2048_ca.cerから entrust ルート証明書をダウンロードし、iphone 開発者が pem 証明書を使用してサーバーにインストール/アップロードしたところ、機能しました。

誰かが同じ問題を抱えている場合は、これに従ってください。

于 2013-04-15T11:38:13.543 に答える