Мое приложение для Android не может получить сообщение fcm от python

#android #python-3.x #firebase #firebase-cloud-messaging

#Android #python-3.x #firebase #firebase-облако-обмен сообщениями

Вопрос:

Я создаю приложение для Android с помощью firebase cloud messaging. Мое приложение может получать сообщение от консоли FCM. Однако оно не может получить от python, хотя ответ хороший. Не могли бы вы дать мне несколько советов?

 class fbMessaging():
    def __init__(self):
        cred = credentials.Certificate('./env/firebase.json')
        firebase_admin.initialize_app(cred)

    def send_to_device(self, text, token):
        message = messaging.Message(
            data = {
                'title': 'test',
                'body': text,
            },
            token = token,
        )
        response = messaging.send(message)
        return response

def main():
    fm = fbMessaging()
    res = fm.send_to_device('test', 'MY CORRECT TOKEN')
    print(res)
  

onMessageRecieved находится здесь

     override fun onMessageReceived(message: RemoteMessage?) {
        val from = message!!.from
        val data = message.data

        Log.d(TAG, "from:"   from!!)
        Log.d(TAG, "data:$data")

    }
  

Печатный ответ приведен ниже.

проекты / совпадение-XXXXX / сообщения/0:1554291593xxxxxxCf99108f9xxxxxx

Комментарии:

1. Как выглядит ваш onMessageReceived метод? Создаете ли вы уведомление из отправляемой вами полезной нагрузки?

2. Спасибо за ответ! Я добавил метод onMessageReceived.

3. Есть только операторы logs. Где вы создаете уведомление?

4. Я понятия не имею об уведомлении.. Это для Android или Python? и упоминается ли это в руководстве?

5. То, что вы делаете, — это отправка полезной нагрузки уведомления из консоли Firebase и полезной нагрузки данных из кода Python и ожидание пользовательского интерфейса уведомления в системном трее.

Ответ №1:

Используя Firebase Cloud Messaging, вы можете отправлять полезную нагрузку уведомлений или полезную нагрузку данных, или и то, и другое.

Полезная нагрузка уведомления содержит заголовок — Текст заголовка уведомления — Тело уведомления

Имена ключей исправлены и не могут быть изменены.

С другой стороны,полезная нагрузка данных — это просто пара ключ-значение, и вы можете отправить любое имя ключа со строковым типом в качестве его значения.

Поведение FCM:

В зависимости от того, находится ли приложение на переднем плане или в фоновом режиме, а также от наличия полезной нагрузки уведомления или данных или и того, и другого, сообщение FCM принимается различными компонентами приложения.

Обработка уведомления FCM в соответствии с документацией,

  • Уведомления доставляются, когда ваше приложение работает в фоновом режиме. В этом случае уведомление доставляется в системный трей устройства. Пользователь, нажавший на уведомление, по умолчанию открывает панель запуска приложения.

  • Сообщения с уведомлением и полезной нагрузкой данных при получении в фоновом режиме. В этом случае уведомление доставляется в системный трей устройства, а полезная нагрузка данных доставляется в дополнение к намерению вашей активности запуска.

Это поведение было четко объяснено в разделе получения сообщений.

Как вы можете видеть, если только в том случае, когда полезная нагрузка уведомления отправляется автономно, вам не нужно создавать пользовательский интерфейс уведомлений. В противном случае вам придется создать пользовательский интерфейс уведомлений при onMessageReceived вызове.

Использование Python:

Пример полезной нагрузки уведомления:

 message = messaging.Message(
    notification=messaging.Notification(
        title='This is a Notification Title',
        body='This is a Notification Body',
    ),
    token=registration_token,
)
  

Пример полезной нагрузки данных:

 message = messaging.Message(
    data={
        'score': '850',
        'time': '2:45',
    },
    token=registration_token,
  

Оба:

 message = messaging.Message(
    notification=messaging.Notification(
        title='This is a Notification Title',
        body='This is a Notification Body',
    ),
    data={
        'score': '850',
        'time': '2:45',
    },
    token=registration_token,
  

Комментарии:

1. Вы имеете в виду, что полезная нагрузка уведомления вызывается, когда я отправляю сообщение из консоли FCM, а полезная нагрузка данных вызывается из python без уведомления в системном трее?

2. Нет, полезная нагрузка данных принимается мобильным устройством, потому что вы передаете data аргумент Message классу init.

3. Проблема решена с помощью уведомления (ваш оба примера), и я понимаю, как доставлять данные без отображения уведомления, большое вам спасибо.

4. У меня была точно такая же проблема, и этот ответ решил ее.