1

我允許用戶通過我的網站發送通知。通知正在工作,但是,我想要一種方法來實際確認通知是否已發出(在代碼中),或者如果這至少不能確認curl是否有效,那麼我可以在我的網站上顯示一條消息它成功或失敗。在我的jquery post請求中,即使我在我的php中提供了一個無效的API_ACCESS_KEY(因此它顯然沒有發送通知,但它仍然說成功),狀態似乎總是「成功」。我如何確定通知已發出?感謝任何幫助。如何確認Firebase通知實際上已發送(fcm)?

這裏是我的index.html POST請求:

$("#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 
     }); 
    } 
}); 

這裏是發送-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

您是否在任何地方檢查'$ result'的值?你應該檢查HTTP響應代碼,如果它是200,你應該檢查響應主體。 – Eran

+0

我有點困惑這是什麼意思,但是當我嘗試echo $結果時,沒有任何東西(即使通知正在工作併發送到設備)。 –

+0

if($ result = curl_exec($ ch))echo「working」;這似乎總是返回true,即使當我設置一個糟糕的API_ACCESS_KEY –

回答

2

您可以使用curl_getinfo

檢查響應信息,如果yur狀態代碼200符合一切正常。

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

謝謝,我已經想出瞭如何獲取代碼。現在我已經有了回覆代碼,我該如何將它傳遞給我的index.html?有沒有辦法在index.html中將響應代碼發送回我的函數(數據,狀態){}? –

+0

當狀態碼是200時,你可以從php返回一些東西(也許是真的),然後在你的ajax中使用它。 –

+2

你可以在這裏看到http狀態碼:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes 2xx是成功的 –

0

您將獲得成功結果 $結果= curl_exec($ CH); 結果格式將爲

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