0

だから、私はアプリケーションを持っています。このアプリは、このPHPコードを使用してプッシュ通知を送信します。すべてのユーザーにプッシュ通知を送信

<?php 

$deviceToken = '4bc9b8e71b9......235095a22d'; 

// Put your private key's passphrase here: 
$passphrase = '12345'; 

// Put your alert message here: 
$message = 'My Message Here!'; 

//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
     'ssl://gateway.sandbox.push.apple.com:2195', $err, 
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
'alert' => $message, 
'sound' => 'default' 
); 

// Encode the payload as JSON 
$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) .     $payload; 

// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
echo 'Message not delivered' . PHP_EOL; 
else 
echo 'Message successfully delivered' . PHP_EOL; 

// Close the connection to the server 
fclose($fp); 

私の質問は:私は私のアプリで複数のユーザーを持っている、と私はターミナルで、このPHPコードを実行すると、プッシュ通知が送信のみされますこのデバイス(4bc9b8e71b9 ...)に送信するか、すべてのユーザーに送信されますか?これがこのデバイスにのみ送信される場合、すべてのユーザーにプッシュを送信するにはどうすればよいですか?

PS:私はthisチュートリアルに従いました。プッシュがすべてのユーザーに送信されるかどうかわからないのを除いて、うまくいきました。

悪い英語で申し訳ありません。ありがとうございました !!

+0

あなたのアプリはあなたのサーバーに戻ってくるAPNsデバイストークンを送る必要があります。 – onnoweb

+0

申し訳ありませんが、初めてプッシュ通知を使用しています。あなたはそれをより良く説明できますか?ありがとう!! –

+0

私が欲しいもののチュートリアルを知っていますか? –

答えて

2

通常のアプローチは、データベースに、あなたがそれらを送信する必要が一度トークンを格納することであるとのゲートウェイにそれらを記述します - ちょうど選びますDBからトークンを取り出し、それらをループします。

コードは、また、あなたがプッシュ通知の送信を終了した直後にリンゴのフィードバックサービスに耳を傾けるのは良いアイデアかもしれないと

$pdo = new PDO(
    "mysql:host=$db_host;port=$db_port;dbname=$db_name", 
    $db_user, 
    $db_pass 
); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
$select_tokens_sql = 'SELECT * FROM tokens'; 
$select_tokens_statement = $pdo->prepare($select_tokens_sql); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default' 
); 

// Encode the payload as JSON 
$payload = json_encode($body); 

$select_tokens_statement->execute(); 
$tokens = $select_tokens_statement->fetchAll(); 
//loop through the tokens 
foreach($tokens as $token) {  

    // Build the binary notification 
    $msg = chr(0) . pack('n', 32) . pack('H*', $token) . pack('n', strlen($payload)) . $payload; 

    // Send it to the server 
    $result = fwrite($fp, $msg, strlen($msg)); 

    if (!$result) 
     echo 'Message to the device ' . $token . ' not delivered' . PHP_EOL; 
    else 
     echo 'Message to the device ' . $token . ' successfully delivered' . PHP_EOL; 
} 
// Close the connection to the server 
fclose($fp); 

のように見えるかもしれません。あなたのアプリがもう存在しないので、データベースから対応するトークンを安全に削除することができます。

+1

1000万台のデバイスにプッシュ通知を送信すると適切なコードですか? – Satyam

+0

@Satyamあなたはいくつかのコードを見つけましたか? – Darpan

1

あなたのデバイストークンのすべてをループに持つとfwriteの()

+1

これで、すべてのデバイストークンをデータベースを作成し、PHPコードでループを行い、各デバイスにメッセージを送信しますか? –

+0

これはあなたがこれを行うべき方法です。 – Mark

関連する問題