1

J'autorise les utilisateurs à envoyer des notifications via mon site Web. Les notifications fonctionnent, cependant, je voudrais un moyen de confirmer réellement si la notification a été envoyée (dans le code), ou si cela n'est pas possible au moins la confirmation que le curl a fonctionné, ainsi je peux montrer un message sur mon site Web il a réussi ou échoué. Dans ma requête jquery post, le statut semble toujours être "réussi", même si je fournis un API_ACCESS_KEY invalide dans mon php (donc il est évident qu'il n'envoie pas la notification mais il dit toujours le succès). Comment puis-je savoir avec certitude que la notification a été envoyée? Reconnaissant pour toute aide.Comment puis-je confirmer que la notification Firebase a bien été envoyée (fcm)?

Voici ma demande de poste à index.html:

$("#send-button").click(function(){  
    if($("#send").val().length == 0) { 
     return; 
    } else { 
     $.post("php/send-notification.php", 
     { 
      notification_message: $("#send").val() 
     }, 
     function(data, status) { 
      alert("Data: " + data + "\nStatus: " + status); 
      // status seems to always be "success" even with an invalid API_ACCESS_KEY 
     }); 
    } 
}); 

Voici send-notification.php:

<?php 
    define('API_ACCESS_KEY', 'AAA....AAA'); 

    $msg = array 
    (
     'body' => $_POST['notification_message'], 
     'vibrate' => 1, 
     'sound'  => 1, 
     'badge'  => 1 
    ); 

    $fields = array 
    (
     'to'   => "/topics/global", 
     'notification' => $msg, 
     'priority'  => 'high' 
    ); 

    $headers = array 
    (
     'Authorization: key=' . API_ACCESS_KEY, 
     'Content-Type: application/json' 
    ); 

    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); 
    curl_setopt($ch,CURLOPT_POST, true); 
    curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields)); 
    $result = curl_exec($ch); 
    curl_close($ch); 
?> 
+1

Vérifiez-vous la valeur de '$ result' n'importe où? Vous devriez vérifier le code de réponse HTTP, et si c'est 200, vous devriez vérifier le corps de la réponse. – Eran

+0

Je suis un peu confus de ce que cela signifie mais quand j'essaye d'echo $ result, il n'y a rien (même si la notification fonctionne et est envoyée aux périphériques). –

+0

if ($ resultat = curl_exec ($ ch)) echo "travaillé"; cela semble toujours retourner vrai, même lorsque je mets un mauvais API_ACCESS_KEY –

Répondre

2

Vous pouvez utiliser curl_getinfo

pour vérifier informations de réponse, si votre code d'état 200 qui répondent à tout ok.

$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
if($httpcode == 200) { 
    //everything ok 
} 
+0

Merci, j'ai compris comment obtenir le code maintenant. Maintenant que j'ai le code de réponse, comment puis-je le relayer à mon index.html? Est-il possible d'envoyer le code de réponse à ma fonction (données, statut) {} dans index.html? –

+0

Vous pouvez retourner quelque chose de php (peut-être vrai) lorsque le code d'état est 200 et le reprendre dans votre ajax. –

+2

Vous pouvez voir les codes d'état http ici: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes 2xx are Success –

0

Vous obtiendrez résultat à succès $ result = curl_exec ($ ch); Le format du résultat sera

"multicast_id": 6581315937669460028, 
    "success": 1, 
    "failure": 0, 
    "canonical_ids": 0, 
    "results": [ 
    { 
     "message_id": "0:1495111364345221%d8a1cb15f9fd7ecd" 
    } 
    ] 
}