5

みなさん、こんにちは!私は現在、Applesプッシュ通知用のフィードバックサービスを実装しています。プッシュ部分はすべて完了し、サンドボックスと配布アプリの両方で作業しています。ただし、フィードバックサービスが機能していないようです。関数を使おうとするたびに、ページがうまく機能します。タイムアウトが発生します。

私はこの答えに従って自分の関数を作成しました:APNsフィードバックサーバーにクエリを実行するPHPテクニック

これが私の完全な関数コードです:

function checkFeedbackServer($appBundle,$useDev = TRUE)
{
    $apnsPort = 2195;
    $apnsCert = keyForApp($appBundle,$useDev);

    if($useDev)
    {
        echo 'FEEDBACK in DEVELOPER MODE <br/>';
        $apnsHost = 'feedback.sandbox.push.apple.com';
    }
    else
    {
        echo 'FEEDBACK in DISTRIBUTION MODE <br/>';
        $apnsHost = 'feedback.push.apple.com';
    }
    $finalPath = 'ssl://' . $apnsHost . ':' . $apnsPort;

    echo 'OPENING STREAM TO -> ' . $finalPath . '<br/>';
    echo 'USING CERT : ' . $apnsCert . "<br/>";


    $stream_context = stream_context_create();
    stream_context_set_option($stream_context, 'ssl', 'local_cert', $apnsCert);

    $apns = stream_socket_client($finalPath, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $stream_context);

    if(!$apns) 
    {
        echo "ERROR $errcode: $errstr\n";
        return;
    }
    else echo 'APNS FEEDBACK CONNECTION ESTABLISHED...<br/>';

    $feedback_tokens = array();    
    $count = 0;

    echo 'error= ' . $error . '<br/>';
    echo 'errorString= ' . $errorString . '<br/>';

    if(!feof($apns))
        echo 'APNS NOT FINISHED <br/>';
    else
        echo 'APNS FINISHED? <br/>';    

    $result = fread($apns, 38);
    echo 'result= ' . $result;
    fclose($apns);
}

行を削除すると、次のことに気づきました。

$result = fread($apns, 38);
echo 'result= ' . $result;

その後、関数は正しく機能します。したがって、一言で言えば、本番環境と開発者の両方のフィードバックサービスへの接続を開くことができますが、サーバーからデータを取得しようとするとすぐに、スクリプトがタイムアウトします。

また、この関数keyForApp($appBundle,$useDev)は、正しい証明書をフェッチするデータベースへのクエリの単純なラッパーです。デバイスにメッセージをプッシュしているときにも使用しているので、動作することを保証します。

4

1 に答える 1

6

それを解決しました..私は間違ったポートを持っていたことがわかりました。明確にするために :

  1. ポート2195はメッセージをプッシュするためのものです
  2. ポート2196はフィードバックを取得するためのものです

私の悪い..;)私は2つを混ぜ合わせて、2196ではなくポート2195でフィードバックサーバーに接続していました

于 2011-01-24T14:21:43.717 に答える