Действительно странно, и никто никогда не спрашивал об этом.
Я получаю MismatchSenderId
как ошибку с моим ключом сервера как мой ключ авторизации (ключ сервера). С другой стороны, я получаю успех в качестве результата возврата от push_notification (), если токен моего устройства как мой ключ авторизации, но на моем устройстве не получено уведомление.
Я уверен, что мой токен прав, потому что я могу отправить на одно устройство с токеном в консоли firebase (одно устройство).
Что затем приводит меня к этому другому вопросу , но затем я хотел бы подтвердить этот вопрос, прежде чем переходить к части уведомления
На самом деле я довольно потерян, так как все ошибки MismatchSenderId
были устранены с заменой правильного ключа сервера.
<?php require "dbconfig.php"; $sql = "SELECT token FROM tokendb"; $result = mysql_query($sql) or die($sql."<br/><br/>".mysql_error()); $tokens = array(); while($row = mysql_fetch_assoc($result)) { echo $row['token']; //this shows the same token compared to the token show in logcat(visual studio) $tokens[] = $row["token"]; echo '<form id="form1" name="form1" method="post" action="">'. '<p>From<br>'. '<input type="text" size="100" maxlength="100" name="From" id="From" /><br>'. '<p>Title<br>'. '<input type="text" size="100" maxlength="100" name="Title" id="Title" />'. '<br>'. '<input type="submit" name="Send" id="Send" value="Send" />'. '</form>'; } $message = array("message" => "notification test"); $message_status = sendFCMMessage($message, $tokens); echo $message_status; function sendFCMMessage($message,$target){ //FCM API end-point $url = 'https://fcm.googleapis.com/fcm/send'; $fields = array(); $fields['body'] = $message; if(is_array($target)){ $fields['registration_ids'] = $target; }else{ $fields['to'] = $target; } //header with content_type api key $headers = array( 'Content-Type:application/json', 'Authorization:key=********' ); //CURL request to route notification to FCM connection server (provided by Google) $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); if ($result === FALSE) { die('Oops! FCM Send Error: ' . curl_error($ch)); } curl_close($ch); return $result; } ?>
EDIT : этот короткий PHP-код также дает мне ошибку MismatchSenderId
<?php $ch = curl_init("https://fcm.googleapis.com/fcm/send"); $header=array('Content-Type: application/json', "Authorization: key=***(serverkey from project)"); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false ); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "{ \"notification\": { \"title\": \"Test desde curl\", \"text\": \"Otra prueba\" }, \"to\" : \"my device's token\"}"); curl_exec($ch); curl_close($ch); ?>
ОБНОВИТЬ
Удаление и повторная установка приложения разрешили проблему.
Ошибка MismatchSenderId
возникает, когда вы пытаетесь отправить маркер регистрации, связанный с другим отправителем (Project). Из документов:
Маркер регистрации привязан к определенной группе отправителей. Когда клиентское приложение регистрируется для FCM, оно должно указать, какие отправители могут отправлять сообщения. Вы должны использовать один из этих идентификаторов отправителя при отправке сообщений в клиентское приложение. Если вы переключитесь на другого отправителя, существующие токены регистрации не будут работать.
Убедитесь, что ключ сервера, который вы используете, связан с тем же проектом отправителя, с которым связан токен регистрации. Вы можете сделать это, проверив файл google-services.json и посмотрите, соответствует ли идентификатор отправителя идентификатору отправителя, показанному в проекте Firebase Project, который вы используете для отправки сообщения.
Что касается не получения сообщений, немного неясно, какова структура полезной нагрузки, которую отправляет ваш код. Попробуйте проверить, является ли это правильно структурированной полезной нагрузкой сообщения с полезной нагрузкой на notification
и / или data
.
Заставьте вас взять серверный ключ с правильного места. Теперь немного сложно получить ключ сервера для уведомления от firebase.
Вот шаги:
GO TO CONSOLE -> ВАШ ПРОЕКТ -> НАСТРОЙКИ ПРОЕКТА -> СООБЩЕНИЕ ОБЛИЦОВОК (вторая вкладка)
И возьмите свой ключ сервера и идентификатор отправителя, который будет работать для вас.
Удалите приложение и установите его и попробуйте.