みなさん、こんにちは!私は現在、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)
は、正しい証明書をフェッチするデータベースへのクエリの単純なラッパーです。デバイスにメッセージをプッシュしているときにも使用しているので、動作することを保証します。