Facebook がデスクトップ用の HTML5 通知を使い始めたことに気づき、ブログの楽しみのためにそれに手を出そうと思いました。私のアイデアは非常に単純です。新しいブログが公開され、apache cronjob が X 分ごとに実行され、ファイルが呼び出され、PHP ウィザードが実行され、通知が送信されます。
私はオンラインでnode.js と 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
}
上記のフィドルを見ることができます。
ユーザーへのアクセスが許可され、いつでも通知を送信できるようになりました。素晴らしい!次に、XYZ という ID を持つブログ エントリを作成します。私の cron ジョブは、上記の 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 の「アラート」は現在「1」に設定されていますが、デスクトップ ブラウザには通知がありません。私のブラウザは、通知を送信しているのと同じ URL に登録されているので、メッセージが表示されると思います。
私が何か間違ったことをしている (おそらく PHP はこれに適した言語ではないのでしょうか?) か、仕様を誤解しています。誰かが私を正しい方向に向けるのを手伝ってもらえますか? 私は何かが欠けていると思います。
どうもありがとう。
更新 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 とは対照的に、ページの読み込み時またはクリック時にのみ呼び出すことができるため、まだ何かが足りないと思います。