web-dev-qa-db-ja.com

プッシュ通知はどのように機能しますか?

PHPベースのWebサイトにプッシュ通知を実装しようとしています。目標は、Stackoverflowや他のサイトがメッセージを受け取ったときにリアルタイムでユーザーに通知するものに似たものを作ることです。

私はmysqlをデータベース、Apacheをサーバーとして使用しています。Amazon-SNSをこれらの通知のフレームワークとして使用することを検討しています。それは、そのサービスが意図されているように思われるためです。

sending.phpページとreceiving.phpページがプログラムでどのように設定されているかについて、文献をよく理解していません。 sending.phpページには、あるページへの$_POST['message']だけが含まれていると思いますが、そこからは本当に迷っています。

何かがreceiving.phpページがプッシュ通知でどのように見えるかを理解するのに役立つ場合、私はそれを大いに感謝します。

26
tim peterson

ワーキング

HTML5rocksは、WebSocketがどのように機能するかについて、適切な説明 here を提供しています。

まあ、それをサポートするブラウザでWebsocketを利用できます(すべての最新のブラウザが優れたサポートを提供しているため)

入門

これらのいくつかのリソースから始めることができます:

HTML5rocks

Nettuts +

Nettuts +は websockets を使い始めるのに適したチュートリアルです。

Websocketをサポートするブラウザの場合

後退する

Modernizr を使用して、クライアントのブラウザがWebSocketをサポートしているかどうかを検出できます。フォールバックとして、WebSocketの代わりにFlashを使用できます。

これらのプロジェクトの場合、WebSocketを使用しないか無効にしてブラウザーで実行すると、 web-socket-js が使用されます。ネイティブよりも効率は低くなりますが、レイテンシよりもはるかに低いレイテンシになります。

Flashを搭載したブラウザは、 web-socket-js shim/polyfillを使用してWebSocketをサポートできます。

参照:

WebSocketsの代替

https://softwareengineering.stackexchange.com/questions/33713/is-there-an-alternative-to-html-web-sockets-now-that-firefox-4-has-disabled-the

15
Viren Rajput

実際に行った実際の実装を共有したかっただけです。 @Virendraの優れた回答のリンクを読んで、Pusherがあなたのために解決することに気付いたように、Push通知の実装には多くの困難な問題があるので、私は素晴らしいSAAS、 Pusher を使用することにしました。

私が最も感銘を受けたのは、これを機能させるために記述する必要のあるコードがどれだけ少ないかです。下記参照。私のサーバー側はPHP( Pusherには多くの言語のライブラリがあります )です。

require('/application/thirdParty/pusher-html5-realtime-Push-notifications/lib/squeeks-Pusher-PHP/lib/Pusher.php');
require('/application/thirdParty/pusher-html5-realtime-Push-notifications/config.php');
$pusher = new Pusher(APP_KEY, APP_SECRET, APP_ID);

foreach($recipients as $row){                   
  $channel='my-channel'.$row->recipient_id;
  $pusher->trigger($channel, 'notifications', 
    array('message' => $row->message,
          'notification_id' => $row->notification_id) 
  );
}

これがHTML/JSです(圧倒されないでください。このコードのほとんどは、Stackoverflowなどが行うように、小さな円とリストに着信通知を入力するだけです)。

<script src="/application/thirdParty/pusher.min.js"></script>
<script>     
var myID=179; // would receive notification if myID matches $row->recipient_id above;
var myChannel = pusher.subscribe('my-channel'+myID);
myChannel.bind('notifications',
  function(data) {
        var message=String(data.message),
            url='/notifications/'+data.notification_id, 
            icon='<i class=\'icon-heart\'></i>',
            urlText=icon+message;

        var notificationRow='<li><a href='+url+'>'+urlText+'</a></li>';
         $('#notificationsDropdownList').prepend(notificationRow);   

        if(notificationCircleCount==0){
             notificationCircleCount++;
              $notificationCircle.show();
               $notificationCircleCount.html(notificationCircleCount);
        }
        else{
             notificationCircleCount++;
             $notificationCircleCount.html(notificationCircleCount);
        }
        console.log('Pusher happened'+data.message);                  
  } //function
); //myChannel
</script>
4
tim peterson