Send PHP notifications

Asked

Viewed 4,050 times

2

I see many sites 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 to send notifications via PHP and they receive even with the screen closed?

Where should I start my research?

2 answers

3

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

Another caution you should take is that PHP is not a good language to implement daemons, that is, implement websockets is a shot in the foot. PHP was made so that the processes start and have an end, keeping a process always active will greatly increase the use of memory and processing of your server. Since PHP has no way to manage memory you will only have to rely on Garbage Collector, which is a bad idea. (If you have any questions about this, here is an explanation https://software-gunslinger.tumblr.com/post/47131406821/php-is-meant-to-die)

Although Push API does not use websockets, keep this in mind, it is best to use another language if you want a real-time notification system. And also think of the situation that by working with Workers, you will receive short-time calls from all users who enable this feature, what may weigh on your server due to the high number of processes that will be opened as 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/s and 6000/m add that to the average number of visits to your site per minute and you will have the total of processes executed. You will come to the conclusion that it is not a good thing to leave this type of feature in the hand of PHP, because the processing used is very high.

That’s why you’ll find few examples in PHP about features like notifications.

Some PHP implementations

References:

  • My question would be, how to have the service directly, why should I always use something third? What would I need to have my own service?

  • @Roberta Updated. I hope it helps.

  • just use the Websocket protocol correctly. As @Newtech said, PHP might not be the best tool for this. However, you have an interesting agnostic guide here: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers

2

Hi. I have a code here. If you don’t run it here, save it to your server and run it directly.

Then you just use your creativity to edit.. Can handle with 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 }}?>

  • 1

    Hello Neto. We appreciate your willingness to share knowledge, but I have to say that sharing only codes is almost always not useful. The code may be trivial to you, but to other users it can be quite confusing, so always try to explain in words what you are doing in the code. If the code is well formatted and commented, a brief introduction is enough, but always seek to cite the documentation of the functions or tools used.

  • 1

    Oh yes, thank you. Although I already work in the area, I entered hj on the site. But thanks for the tip. I will definitely accept. :)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.