私はFacebookがデスクトップ用のHTML5通知を使用し始めたことに気付きました。私は自分のブログで楽しいものになると思っていました。私のアイデアはかなりシンプルです:新しいブログが出てきて、apache cronjobがX分ごとに実行され、ファイルが呼び出され、PHPの魔法が出て、通知が出ます。PHPでのHTML5通知
私はオンラインで見て、node.js and angularを使って例を見つけましたが、どちらかを使用するのは快適ではないので、私はむしろPHPに固執します。
私のプロセスです:ユーザーは自分のブログに行き、通知を許可するボタンをクリックします。簡潔にするために、以下のコードは、ユーザーに「通知」ボタンをクリックすると通知を送信します。これは完全に機能し、理論上は将来の通知にそれらを登録する必要があります。
if ('Notification' in window) {
function notifyUser() {
var title = 'example title';
var options = {
body: 'example body',
icon: 'example icon'
};
if (Notification.permission === "granted") {
var notification = new Notification(title, options);
} else if (Notification.permission !== 'denied') {
Notification.requestPermission(function (permission) {
if (permission === "granted") {
var notification = new Notification(title, options);
}
});
}
}
$('#notify').click(function() {
notifyUser();
return false;
});
} else {
//not happening
}
上記のfiddleが表示されます。
ユーザーへのアクセスが許可されましたので、いつでも通知を送信できます。驚くばかり!私はブログのエントリを書き、それはXYZのIDを持っています。私のcronjobは、上記のnode.jsの例をテンプレートとして使って、次のPHPスクリプトを呼び出して呼び出します。
は(私のデスクトップが同じドメインに「加入」しているので、この例では、私はちょうど。私の携帯電話から手動でスクリプトを呼び出すと、私のデスクトップ画面を見ていて、私は次のように/動作するはずだと思う。)$num = $_GET['num'];
$db = mysql_connect(DB_HOST, DB_USER, DB_PASS);
if($db) {
mysql_select_db('mydb', $db);
$select = "SELECT alert FROM blog WHERE id = ".$num." && alert = 0 LIMIT 1";
$results = mysql_query($select) or die(mysql_error());
$output = '';
while($row = mysql_fetch_object($results)) {
$output .= "<script>
var title = 'new blog!';
var options = {
body: 'come read my new blog!',
icon: 'same icon as before or maybe a new one!'
};
var notification = new Notification(title, options);
</script>";
$update = "UPDATE blog SET alert = 1 WHERE id = ".$num." && alert = 0 LIMIT 1";
mysql_query($update) or die(mysql_error());
}
echo $output;
}
私はデータベースとブログエントリをチェックします。XYZの "alert"は "1"に設定されていますが、デスクトップブラウザは通知されませんでした。私のブラウザは通知を送り出すのと同じURLに登録されているので、私はメッセージを受け取ると思います。
私は間違ったことをしています(おそらく、これは正しい言語ではありません)、あるいは私はその仕様を誤解しています。誰かが私を正しい方向に向けるのに役立つでしょうか?私は何かが足りないと思う。
ありがとうございます。
アップデート1
は、コメントによると、私はそれにこれでスクリプトを呼び出す場合:
var title = 'new blog!';
var options = {
body: 'come read my new blog!',
icon: 'same icon as before or maybe a new one!'
};
var notification = new Notification(title, options);
それは私の通知にサブスクライブしているすべてのデバイスを打つ必要があります。私は私の電話でこれを試みたが、私のデスクトップはまだ通知を得ていなかった。通知が1つのデバイスに固執しているように見え、ページがブラウザで開かれていなくても通知を送るFacebookとは対照的に、ページロードまたはクリックでのみ呼び出すことができるため、
JSから繰り返し提供されたURLをフェッチして、変更が発生した後に取得する必要があります。あなたは接続を開いて長時間の投票や彗星を残すことができますが、それは新しいブログ投稿のような低頻度の更新のために過度です。 – dandavis
私は分かりません。 URLを取得して通知を送信すると、登録されたすべてのユーザーにヒットしますか?問題のデバイスのみを送信しているように見えますが、追加のデバイスは送信していないようです。 –
次回にページをリロードしたり、PHPをajaxしたりすると、それらがヒットします。 PHPには組み込みの「購読」はありませんが、「プッシュ」する方法はいくつかあります。シンプルなRSSファイルはlo-fiの方法です。ユーザーが購読されている場合は、通常、通知を受け取ります。 – dandavis