0

このチュートリアルを使用して、プッシュ通知を送信するように PHP スクリプトをセットアップしました。エラーなしでスクリプトを実行しましたが、デバイスに何も表示されません。私は何を間違っていますか?

4

2 に答える 2

7

プッシュ通知用の共通関数を作成します アプリの要件に従って、関数 devicetoken、メッセージ、および追加のパラメーターで次のパラメーターを渡します。開発者の pem ファイルを使用している場合は、「gateway.sandbox.push.apple.com:2195」を使用する必要があり、ディストリビューターの panm ファイルを使用している場合は、「gateway.push.apple.com:2195」を使用する必要があります。

public function pushtoios($devicetoken, $message, $params = array()) {
    $passphrase = 'apple';
    $ctx = stream_context_create();
/*Development pam file*/
    //stream_context_set_option($ctx, 'ssl', 'local_cert',  your path.'apns-dev.pem');
/*Distributer pam file*/
    stream_context_set_option($ctx, 'ssl', 'local_cert', your path.'apns-distr.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

/*For Development pam file*/
    //$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);

/*For Distributer pam file*/
    $fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
    if (!$fp)
        exit("Failed to connect amarnew: $err $errstr" . PHP_EOL);

    $body['aps'] = array(
        'alert' => $message,
        'sound' => 'default'
    );
    $body['type'] = $params['type'];
    $body['params'] = $params;
    $payload = json_encode($body);
    $msg = chr(0) . pack('n', 32) . pack('H*', $devicetoken) . pack('n', strlen($payload)) . $payload;

    $result = fwrite($fp, $msg, strlen($msg));
    if (!$result) {
        return false;
    } else {
        return true;
    }
    fclose($fp);
}
于 2015-10-10T05:50:49.683 に答える
0

私は同じ問題を抱えていますが、私が見落としているこの行を編集することで解決しました...

$output = json_encode($payload);

$payload = json_encode($payload);

最初のものはstrlenエラーを出しますが、私のサーバーではエラーは生成されません。実サーバーでの試行に失敗した後、ローカルホストで実行するとstrlenエラーが発生しました。

また、pemファイルにパスワードが含まれているため、local_certにsslpasspharseを追加します。

以下は、機能する最終的なコードです...your_token_hex_stringとyour_passphraseを独自の情報に置き換えてください。

$device = 'your_token_hex_string';
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default');
$payload = json_encode($payload);

$options = array('ssl' => array(
  'local_cert' => 'apns_dev.pem',
  'passphrase' => 'your_passphrase'
));

$streamContext = stream_context_create();
stream_context_set_option($streamContext, $options);
$apns = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device)) . chr(0) . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);
fclose($apns);
于 2011-01-28T18:09:58.480 に答える