私は本当にこれで苦労しています。このコードは私によって作られたものではありませんでしたが、私はそれを変更して作品のようにしました。私の目標は、アプリを使用するすべての端末にプッシュ通知を送信できるようにすることです。私はiosとandriodがプログラムされているのでベストを尽くすつもりです。私は整理して、私に与えられたコードを変更して、ただ1つのデバイスに通知を送信するようにしました。複数のデバイスへのiosとAndroidのプッシュ通知
これは、コード
<?php
include 'conn.php';
if ($_REQUEST['key'] == 'notification') {
include 'notifications.php';
$message = $_REQUEST['text'];
$text = mysql_real_escape_string($_REQUEST['text']);
$start = $_REQUEST['start'];
$end = $_REQUEST['end'];
$date = date("Ymd", strtotime($_REQUEST['date']));
$callus = $_REQUEST['callus'];
$in = "INSERT INTO `notifications` (`date`, `start_time`, `end_time`, `text`, `call_us`) VALUES ('$date', '$start', '$end', '$text', '$callus');";
mysql_query($in);
} else {
$message = mysql_real_escape_string($_REQUEST['text']);
$time = date('Y-m-d H:i:s');
$in = "INSERT INTO `alerts` (`text`, `time`) VALUES ('$message', '$time');";
mysql_query($in);
$sel="SELECT * FROM `users` GROUP by device_token";
$rs = mysql_query($sel) or die('');
if (mysql_num_rows($rs) != 0) {
while($row=mysql_fetch_array($rs)) {
$regi = array();
$regi[] = $row['device_token'];
$dev = $row['device_token'];
if(strlen ($dev) > 65) {
$regis[] = $row['device_token'];
} else {
$ios[] = $dev;
}
}
}
$url = 'https://android.googleapis.com/gcm/send';
$fields = array('registration_ids' => $regis, 'data' => array('message'=>$message,'count'=>1));
$headers = array(
'Authorization: key=AIzaSyCMysH7TySEgdbvRoCLoZk8uFF1x_A3uxg',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode ($fields));
$result = curl_exec($ch);
curl_close ($ch);
//Apple Push notification
// This this a fake device id:
$deviceToken = "5d8b3165fc03645d23c2651badd69f07d028aee801acf1d25a4d230882156755";
// fake password:
$passphrase = '123456789';
$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',
'badge' => '1'
);
// 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);
}
include 'index.php';
?>
私は$レジに$ deviceTokenにiOSデバイストークンとAndroidデバイストークンを追加し、それが携帯電話に送信されますです。私が変えた唯一の部分は、動作しなかったAppleプッシュ通知部分です。私がそれを変更する前に、リンゴプッシュ通知は$ dev変数を使用し、アンドロイドは$ regiを使用していました。今私は、デバイスのトークンがサーバーに送信されていることを知っているので、私の推測では変数に格納されていないということです。あなたが見ることができる何か問題があります、そして、それらが空であるかどうか見るためにそれらをプリントアウトする方法はありますか?
おかげ