2016-10-30 67 views
1

我想向我的數據庫中的所有用戶發送推送通知,但通過此代碼,我只向我的數據庫中的最後一個用戶發送通知。Android,向多個用戶發送推送通知

<?php 
$connect = mysqli_connect("localhost", "***", "***", "***"); 

$message = $_POST["message"]; 
$title = $_POST["title"]; 
$path = "https://fcm.googleapis.com/fcm/send"; 
$server_key = "***"; 
$sql = "SELECT fcm_token FROM User"; 
$result = mysqli_query($connect, $sql); 

while($row = mysqli_fetch_assoc($result)) { 
    $headers = array("Authorization:key=" .$server_key, "Content-Type:application/json"); 
    $fields = array("to"=>$row["fcm_token"], "notification"=>array("title"=>$title, "body"=>$message)); 
    $payload = json_encode($fields); 
    $curl_session = curl_init(); 
    curl_setopt($curl_session, CURLOPT_URL, $path); 
    curl_setopt($curl_session, CURLOPT_POST, true); 
    curl_setopt($curl_session, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl_session, CURLOPT_IPRESOLVE, CURL_IFRESOLVE_V4); 
    curl_setopt($curl_session, CURLOPT_POSTFIELDS, $payload); 
} 

$result = curl_exec($curl_session); 

curl_close($curl_session); 
mysqli_close($connect); 


$response = array(); 
$response["success"] = true; 

echo json_encode($response); 
?> 

任何人都知道解決方案嗎?

+1

'$結果= curl_exec($ curl_session);' 是不是在你的'while'週期。 –

+1

@PavelStrelchenko不工作是這樣的:警告:mysqli_fetch_assoc()期望參數1是mysqli_result,字符串給出 –

+0

所以,你需要聲明另一個變量=)像這樣:'$ curl_result = curl_exec($ curl_session);' –

回答

0

這將是更好地收集所有的FCM令牌和使用registration_ids,以確保你只發送一個HTTP請求到服務器FCM。您可以找到完整的FCM HTTP協議here

<?php 

$connect = mysqli_connect("localhost", "***", "***", "***"); 

$message = $_POST["message"]; 
$title = $_POST["title"]; 
$path = "https://fcm.googleapis.com/fcm/send"; 
$server_key = "***"; 
$sql = "SELECT fcm_token FROM User"; 
$result = mysqli_query($connect, $sql); 

$tokens = array(); 
while($row = mysqli_fetch_assoc($result)) { 
    $tokens[] = $row["fcm_token"]; 
} 

$headers = array("Authorization:key=" . $server_key, "Content-Type:application/json"); 
$fields = array(
    "registration_ids" => $tokens, 
    "notification" => array("title" => $title, "body" => $message) 
); 
$payload = json_encode($fields); 

$curl_session = curl_init(); 
curl_setopt($curl_session, CURLOPT_URL, $path); 
curl_setopt($curl_session, CURLOPT_POST, true); 
curl_setopt($curl_session, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_session, CURLOPT_IPRESOLVE, CURL_IFRESOLVE_V4); 
curl_setopt($curl_session, CURLOPT_POSTFIELDS, $payload); 

$curl_result = curl_exec($curl_session); 
curl_close($curl_session); 

mysqli_close($connect); 

$response = array(); 
$response["success"] = true; 

echo json_encode($response); 

?> 
+0

爲我工作,謝謝! –

0

你需要在你的while循環中執行你的請求。所以,你需要重寫代碼以下列方式:

<?php 
$connect = mysqli_connect("localhost", "***", "***", "***"); 

$message = $_POST["message"]; 
$title = $_POST["title"]; 
$path = "https://fcm.googleapis.com/fcm/send"; 
$server_key = "***"; 
$sql = "SELECT fcm_token FROM User"; 
$result = mysqli_query($connect, $sql); 

while($row = mysqli_fetch_assoc($result)) { 
    $headers = array("Authorization:key=" .$server_key, "Content-Type:application/json"); 
    $fields = array("to"=>$row["fcm_token"], "notification"=>array("title"=>$title, "body"=>$message)); 
    $payload = json_encode($fields); 
    $curl_session = curl_init(); 
    curl_setopt($curl_session, CURLOPT_URL, $path); 
    curl_setopt($curl_session, CURLOPT_POST, true); 
    curl_setopt($curl_session, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl_session, CURLOPT_IPRESOLVE, CURL_IFRESOLVE_V4); 
    curl_setopt($curl_session, CURLOPT_POSTFIELDS, $payload); 

    $curl_result = curl_exec($curl_session); 
    curl_close($curl_session); 
} 

mysqli_close($connect); 

$response = array(); 
$response["success"] = true; 

echo json_encode($response); 
?> 
+0

我現在在我的目標設備上得到兩個通知。 –

+0

@ lukas-dieser你有信心,你的SQL腳本返回正確的行數和不同的fcm_tokens? –

+0

我的腳本返回了我需要的兩個fcm_tokens(只有兩個),每個標記只有一次。 –