Send PHP notifications

2

I see a lot of websites using pushcrew (or other services) to send notifications, even if the browser is closed.

My question would be, is it possible to do this directly using the HTML 5 Notification API?

How would you do via PHP send notifications and they even receive the screen closed?

Where should I start my searches?

    
asked by anonymous 11.05.2017 / 17:41

2 answers

3

To implement this feature use the Html5 Push API. Stay tuned for compatibility with browsers.

Another caution you must have is that PHP is not a good language for implementing daemons, that is, implementing websockets is a shot in the foot. PHP is designed for processes to start and end, keeping a process running will greatly increase the memory and processing usage of your server. Since PHP has no way to manage memory, you only have to rely on the garbage collector, which is a bad idea. (If you have any questions about this, here's an explanation link )

Although the Push API does not use websockets, keep this in mind, it is better to use another language if you want a real-time notification system. And also think about the situation that by working with workers, you will receive calls in short times from all users that enable this feature, which can weigh on your server due to the high number of processes that will be opened depending on the number of users of your site / system increases.

For example:

If your system has 100 users and notifications are checked every 5 seconds, the minimum request you will have is 100 / if 6000 / m adds this to the average number of visits on your site per minute and will have the total of executed processes. It will come to the conclusion that it is not a good thing to leave this type of resource in PHP's hand, since the processing used is very high.

So you will find few examples in PHP about features such as notifications.

Some PHP implementations

References:

11.05.2017 / 17:47
1

Hi. I have a code here. If you do not run here, save it to your server and run directly.

Then you just use your creativity to edit .. You can handle Mysql

 
<html>
<head>
<script>
 function notificarUsuario77(){
 // Caso window.Notification não exista, quer dizer que o browser não possui suporte a web notifications, então cancela a execução
 if(!window.Notification){
 return false;
 }
 
 // Função utilizada para enviar a notificação para o usuário
 var notificar = function(){
 var tituloMensagem = "Nova Mensagem de Sistema (Automático)!";
 var icone = "http://icon-icons.com/icons2/270/PNG/512/messages_29935.png";
 var mensagem = "Assunto: Nova resposta: crediario \n\n Vá até mensagens e verifique!";
 
 return new Notification(tituloMensagem,{
 icon : icone,
 body : mensagem
 });
 };
 
 // Verifica se existe a permissão para exibir a notificação; caso ainda não exista ("default"), então solicita permissão.
 // Existem três estados para a permissão:
 // "default" => o usuário ainda não deu nem negou permissão (neste caso deve ser feita a solicitação da permissão)
 // "denied" => permissão negada (como o usuário não deu permissão, o web notifications não irá funcionar)
 // "granted" => permissão concedida
 
 // A permissão já foi concedida, então pode enviar a notificação
 if(Notification.permission==="granted"){
 notificar();
 }else if(Notification.permission==="default"){
 // Solicita a permissão e caso o usuário conceda, envia a notificação
 Notification.requestPermission(function(permission){
 if(permission=="granted"){
 notificar();
 }
 });
 }
 };</script>


</head>

<body onload="notificarUsuario77();">
                     
 
</body>
</html>

Example with MYSQL in the middle

<body onload="document.getElementById('div_abas').style.display='';
<?php 

          $buscarusuarios=mysql_query("SELECT mensagens.id as 'msg_id',
                  mensagens.data,
                  mensagens.assunto,
                  mensagens.status,

usuarios.id,
usuarios.nome

FROM mensagens
JOIN usuarios
on 
mensagens.remetente = usuarios.id
 WHERE mensagens.status='0' and  destinatario  = '".$_SESSION[id]."' ORDER by data DESC ");
                if(mysql_num_rows($buscarusuarios) == 0){
                echo"";
                }else{
                    while($linha=mysql_fetch_array($buscarusuarios)){
                      ?>notificarUsuario<?php echo $linha['msg_id'];?>();<?php }}?>">
                      <?php 

          $buscarusuarios=mysql_query("SELECT mensagens.id as 'msg_id',
                  mensagens.data,
                  mensagens.assunto,
                  mensagens.status,

usuarios.id,
usuarios.nome

FROM mensagens
JOIN usuarios
on 
mensagens.remetente = usuarios.id
 WHERE mensagens.status='0' and  destinatario  = '".$_SESSION[id]."' ORDER by data DESC limit 1");
                if(mysql_num_rows($buscarusuarios) == 0){
                echo"";
                }else{
                    while($linha=mysql_fetch_array($buscarusuarios)){
                      ?><button style="display:none;" id="notifica<?php echo $linha['msg_id'];?>" onclick="notificarUsuario<?php echo $linha['msg_id'];?>()">Testar<?php echo $linha['msg_id']?></button>
 <script>
 function notificarUsuario<?php echo $linha['msg_id'];?>(){
 // Caso window.Notification não exista, quer dizer que o browser não possui suporte a web notifications, então cancela a execução
 if(!window.Notification){
 return false;
 }
 
 // Função utilizada para enviar a notificação para o usuário
 var notificar = function(){
 var tituloMensagem = "Nova Mensagem de <?php echo utf8_encode($linha['nome']);?>!";
 var icone = "../css/imagens/nova_msg.jpg";
 var mensagem = "Assunto: <?php echo utf8_encode($linha['assunto']);?> \n\n Vá até mensagens e verifique!";
 
 return new Notification(tituloMensagem,{
 icon : icone,
 body : mensagem
 });
 };
 
 // Verifica se existe a permissão para exibir a notificação; caso ainda não exista ("default"), então solicita permissão.
 // Existem três estados para a permissão:
 // "default" => o usuário ainda não deu nem negou permissão (neste caso deve ser feita a solicitação da permissão)
 // "denied" => permissão negada (como o usuário não deu permissão, o web notifications não irá funcionar)
 // "granted" => permissão concedida
 
 // A permissão já foi concedida, então pode enviar a notificação
 if(Notification.permission==="granted"){
 notificar();
 }else if(Notification.permission==="default"){
 // Solicita a permissão e caso o usuário conceda, envia a notificação
 Notification.requestPermission(function(permission){
 if(permission=="granted"){
 notificar();
 }
 });
 }
 };</script>

 <?php }}?>
    
12.05.2017 / 00:53