2

プッシュ通知に問題があります。私はたくさんのチュートリアルを読んで、以下のスクリプトを思いつきました。APNs に接続できないようです。明確にするために、アプリのアプリ側コードをコーディングしていません。私は PHP と他の Web ベースの言語しか知りません。

証明書と秘密鍵から .pem ファイルを作成するプロセスを完了しました。Web サーバー用の SSL 証明書もあります (これは Web ホスト プロバイダーを介して行いましたが、これが正しい方法であるかどうかはわかりません)。すべてが正常に機能していることをテストするために何が起こらなければならないのか、正確にはわかりません。

Web ページにスクリプトをロードすると、次のエラーが表示されます。タイムアウト) 接続に失敗しました: 110 接続がタイムアウトしました

コードを確認して、APNs に接続できない理由を見つけてください。また、詳細なエラー レポートを取得する方法はありますか?

これが私のコードです:(問題は最初の15行ほどにあるはずです。)

<?PHP
$username = $_GET['username'];
$userIDarr = $_GET['userARR'];
$message = $username.' is d2P';
$passphrase = 'mypass'; // not sure what this refers too.. (from what i have read I think it is meant to be for the iphone side of things)

$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'ck.pem';

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

// Open a connection to the APNS server
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 10, STREAM_CLIENT_CONNECT, $streamContext);

if (!$apns)
    exit("Failed to connect: $error $errorString" . PHP_EOL);
echo 'Connected to Apple service. ' . PHP_EOL;

@mysql_connect ("localhost","down2par_down2pa","4m329aMh") or die ("could not connect to MySQL");
@mysql_select_db ("down2par_d2pdb") or die ("no database");

// create array of all device IDs AND badges that will be receiving notifications
$SQLarr = implode(" AND userid =", $userIDarr);
$DB = mysql_query("SELECT diviceID, badge FROM new_fb_users WHERE userid = '$SQLarr'");



while($DBarr = mysql_fetch_array($DB)) {

    $deviceToken = $DBarr['deviceID'];
    $badge = $DBarr['badge'];
    $id = $DBarr['id'];

    mysql_query("UPDATE new_fb_users SET badge = badge+1 WHERE id = $id");

    // create the payload body
    $body['aps'] = array(
        'alert' => $message,
        'sound' => 'default',
        'badge' => ($badge > 0 ? $badge + 1 : 1)
        );
    // Encode the payload as JSON
    $payload = json_encode($body);

    // Build the binary notification
    $msg = chr(0).pack('n', 32).pack('H*', str_replace(' ', '', $deviceToken)).pack('n', strlen($payload)).$payload;
    // Send it to the server
    $result = fwrite($apns, $msg, strlen($msg));
    if (!$result)
        echo 'Failed message'.PHP_EOL;
    else
        echo 'Successful message'.PHP_EOL;
}

// Close the connection to the server
fclose($apns);
?>
4

1 に答える 1

1

Passphaseは、p12ファイルの作成中に入力する秘密鍵です。p12ファイルをエクスポートしたときに入力した内容をリカルします。詳細については、このチュートリアルを参照してください

このリンクを参照してください

これがお役に立てば幸いです

于 2013-03-08T04:22:50.950 に答える