Отправка консоли FCM работает, но отправка сервера - нет

GCM работал нормально, но теперь fcm не получает никаких уведомлений, если оно было отправлено сервером, оно работает только в том случае, если o отправить с консоли firebase, я почти уверен, что проблема в форме массива, который у меня есть в приложении:

        String messageBody = remoteMessage.getNotification().getBody();

и в php:

        $fields = array(
        'registration_ids'  => $this->devices,
        'data'              => array( "message" => $message ),
    );

как вы думаете, пожалуйста


person code ketty    schedule 03.06.2016    source источник
comment
использует ли приложение FCM тот же идентификатор проекта / отправителя, что и версия вашего приложения в GCM? Вы можете либо перенести старый проект в проект firebase из консоли firebase, либо зарегистрировать приложение FCM для вторичного отправителя через FirebaseInstanceId.getInstance (). GetToken (sender2, FCM), также полезные данные сообщения доступны в remoteMessage .getData (), а не remoteMessage.getNotification (). getBody (). Второе поле предназначено для полезных данных уведомления.   -  person Diego Giorgini    schedule 03.06.2016
comment
да, это не проблема с идентификатором отправителя, поэтому это должно быть только getData () или getData (сообщение)? с GCM я использовал getString (сообщение) и время работы   -  person code ketty    schedule 03.06.2016
comment
getData () вернет объект Map ‹String, String›, где вы можете получить доступ к ключам и значениям, которые вы установили в полезных данных. В вашем случае вы должны использовать getData (). Get (message) firebase.google.com/docs/reference/android/com/google/firebase/   -  person Diego Giorgini    schedule 03.06.2016
comment
ага, хорошо, но как насчет уведомлений, которые поступают из консоли firebase, сможет ли приложение получать без .getNotification (). getBody () ;?   -  person code ketty    schedule 03.06.2016
comment
Уведомления, поступающие с консоли, могут быть только отображаемыми сообщениями. Это означает, что если приложение работает в фоновом режиме, оно автоматически отображает уведомление. Если приложение находится на переднем плане, будет вызван метод onMessageReceive (), и вы сможете прочитать содержимое уведомления через remoteMessage.getNotification (). Get * PS: хотя вы можете отправлять только отображаемые сообщения, эти сообщения могут включать полезные данные . См. Дополнительные параметры в веб-консоли. Относятся ли эти комментарии к исходному вопросу? Если так, я перейду к ответу.   -  person Diego Giorgini    schedule 04.06.2016
comment
Вы можете явно задать свой вопрос?   -  person Edalat Feizi    schedule 04.06.2016
comment
@Diego на самом деле да, это очень ценная информация о системе уведомлений. перепишите его как ответ, чтобы я мог принять его   -  person code ketty    schedule 04.06.2016
comment
@Edalat проблема заключается в установке правильного кода парсера сообщений для этого кода сервера   -  person code ketty    schedule 04.06.2016
comment
это может помочь вам stackoverflow.com/questions/37371990/   -  person Edalat Feizi    schedule 04.06.2016


Ответы (1)


В своем вопросе вы отправляете сообщение с данными, которое представляет собой сообщение с полезной нагрузкой, например: {"registration_ids" : ["token1"], "data" : { "key1" : "value1"}}

Чтобы получить полезную нагрузку data (в примере: key1: value1), клиентское приложение должно использовать:

String value1 = remoteMessage.getData().get("key1");

FCM также поддерживает display-messages.
Пример: {"registration_ids" : ["token1"], "notification" : { "body" : "hello"}}
Эти сообщения автоматически отображаются, когда приложение находится в фоновом режиме. И они вызывают onMessageReceived(), только если приложение уже открыто и находится на переднем плане. Во втором случае вы можете получить доступ к полю исходного уведомления через: remoteMessage.getNotification().getBody()

Отображаемые сообщения также могут включать {"data" : { "key1" : "value1"}}.
Если приложение находится на переднем плане, оно может получить доступ к этим значениям как к сообщению с данными.
Если приложение находится в фоновом режиме, вам нужно подождать, пока пользователь не щелкнет уведомление и не запустит действие .
После этого вы можете получить доступ к данным через: getIntent().getExtras()

PS: уведомления, отправленные через веб-консоль Firebase, являются только отображаемыми сообщениями.

person Diego Giorgini    schedule 05.06.2016