Думаю, проблема в том, что вы отправляете множество уведомлений на несколько устройств в короткие сроки. Я думаю, что это может быть воспринято как спам. Я предлагаю отправить одно уведомление на несколько устройств.
Попробуйте изменить код в report_status.php на этот.
include "../Android_Scripts/Notifications/Push_User_Notification.php";
$message = "Your Report has been approved! Please wait for the fire fighters to respond!";
while ($User_Row = mysqli_fetch_array($Retrieve_User, MYSQLI_ASSOC)){
$User_Token[] = $User_Row['User_Token'];
}
$tokens = implode(",", $User_Token);
send_notification($tokens, $message);
Идея состоит в том, что вы будете собирать пользовательские токены в массиве $User_Token[]
. Затем вам нужно разделить токены запятыми и отправить сообщение один раз всем устройствам, которые связаны с токенами. FCM позволяет отправлять сразу несколько токенов.
обновлен
$User_Token
должен быть массивом. так что снимите взрыв. Это была моя ошибка.
Во-вторых, $message
должен иметь следующий формат.
$message = array(
'title' => 'This is a title.',
'body' => 'Here is a message.'
);
Также следует отметить, что существует 2 типа сообщений, которые вы можете отправлять с помощью FCM. Уведомления или сообщения данных. Подробнее здесь: https://firebase.google.com/docs/cloud-messaging/concept-options
Я не знаю, обрабатывает ли ваше приложение получение сообщений (я не знаю, реализовали ли вы метод onMessageRecieve
), поэтому я, вероятно, предложил бы внести небольшое изменение в массив $fields
в функции send_notification
. Добавление поля уведомлений позволяет Android обрабатывать уведомления автоматически, если ваше приложение находится в фоновом режиме. Поэтому убедитесь, что ваше приложение находится в фоновом режиме при тестировании. https://firebase.google.com/docs/cloud-messaging/android/receive
$fields = array(
'registration_ids' => $tokens,
'data' => $message,
'notification' => $message
);
Так что попробуйте код ниже. Я пробовал и проверял. Меня устраивает. Если это не работает. В send_notification
функция echo $ result возвращает сообщение об ошибке. echo $result = curl_exec($ch);
Тогда мы можем работать оттуда, чтобы увидеть, что не так. Вы можете увидеть, что означают ошибки здесь: https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes
include "../Android_Scripts/Notifications/Push_User_Notification.php";
$message = array(
'title' => 'Report Approved',
'body' => 'Your Report has been approved! Please wait for the fire fighters to respond!'
);
while ($User_Row = mysqli_fetch_array($Retrieve_User, MYSQLI_ASSOC)){
$User_Token[] = $User_Row['User_Token'];
}
send_notification($User_Token, $message);