Получение информации из журнала Qt Android C ++ Firebase (уведомления не работают) - PullRequest
0 голосов
/ 20 декабря 2018

Высокий уровень, с которым я сталкиваюсь, это длинный хвост развития.Я могу найти ответы для Firebase C ++, для Android Studio, для Flutter, для Unity, для React Native ... но не для Qt.

Среднего уровня, у меня есть приложение Qt.При развертывании на iOS работает нормально.Работают push-уведомления - как данные, так и уведомления.На Android данные Pixel XL работают, а уведомления - нет.На Samsung Note 9 ничего не работает.

Низкий уровень, данные и уведомления для Android и iOS работали до обновления Firebase C ++ SDK до 5.4.2 с 4.1.0.(Я знаю, что 5.4.3 - последняя версия, но мы выбрали 5.4.2, потому что другие наши приложения были обновлены только до этого уровня, и мы решили, что лучше всего держать их все на одном уровне.) Я также обновил C ++ 10 доC ++ 14.Если это актуально.

Все более низкий уровень, вот блок из моего main.cpp:

#if TARGET_OS_IPHONE || __ANDROID__
    FirebaseMessaging *listener = new FirebaseMessaging();
    auto result = ::firebase::messaging::Initialize(*fbApp, listener);
    if (result == ::firebase::kInitResultFailedMissingDependency) {
        qDebug() << "Failed initializing firebase";
    } else {
        if (result == ::firebase::kInitResultSuccess) {
            qDebug() << "Firebase initialization returned a success result code.";
        } else {
            qDebug() << "Firebase initialization returned a failure result code.";
        }
        qDebug() << "Firebase initialized with " << result;
    }
    ::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
#endif

Получен ожидаемый результат:

main.cpp(197): Firebase initialization returned a success result code.
main.cpp(201): Firebase initialized with  0

Myслушатель (типа FirebaseMessaging) не ограничен (firebase_messaging.cpp):

#include "firebase_messaging.h"
#include "cpp/3rdparty/logger.hpp"
#include "cpp/controllers/tasklistcontroller.h"
#include "cpp/controllers/logincontroller.h"

using namespace mercury::logger;

FirebaseMessaging::FirebaseMessaging()
{
    qDebug() << "FirebaseMessaging has been instantiated.";
}

void FirebaseMessaging::OnMessage(const firebase::messaging::Message & message) {
  log<INFO>("Received firebase message");
  emit TaskListController::instance()->needsReload();
  if (!message.from.empty()) log<INFO>("from: %s", message.from.c_str());
  if (!message.error.empty()) log<INFO>("error: %s", message.error.c_str());
  if (!message.message_id.empty()) {
      log<INFO>("message_id: %s", message.message_id.c_str());
  }
  if (!message.data.empty()) {
      log<INFO>("data:");
      for (const auto& field : message.data) {
          log<INFO>("  %s: %s", field.first.c_str(), field.second.c_str());
      }
  }
  if (message.notification) {
      log<INFO>("notification:");
      if (!message.notification->title.empty()) {
          log<INFO>("  title: %s", message.notification->title.c_str());
      }
      if (!message.notification->body.empty()) {
          log<INFO>("  body: %s", message.notification->body.c_str());
      }
      if (!message.notification->icon.empty()) {
          log<INFO>("  icon: %s", message.notification->icon.c_str());
      }
      if (!message.notification->tag.empty()) {
          log<INFO>("  tag: %s", message.notification->tag.c_str());
      }
      if (!message.notification->color.empty()) {
          log<INFO>("  color: %s", message.notification->color.c_str());
      }
      if (!message.notification->sound.empty()) {
          log<INFO>("  sound: %s", message.notification->sound.c_str());
      }
      if (!message.notification->click_action.empty()) {
          log<INFO>("  click_action: %s",
                    message.notification->click_action.c_str());
      }
  }
}

void FirebaseMessaging::OnTokenReceived(const char * token) {
  log<INFO>("Firebase token received: %s", token);
  LoginController::instance()->setPushToken(QString::fromUtf8(token));
}

Но единственное, что вообще приходит от слушателя, это сообщение об отладке, что «FirebaseMessaging был создан, а не« получен »сообщение Firebase "или" Получен токен Firebase:% s ".Это означает, что ни одна из этих функций не вызывается.

Итак, я не имею ни малейшего понятия, где моя проблема, или даже как уговорить журналы для понимания.Из журналов, когда я отправляю push-уведомление от нашего API, я получаю:

D FA      : Logging event (FE): notification_receive(_nr), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=QtActivity, firebase_screen_id(_si)=8469772288255777039}]
  V FA      : Connecting to remote service
  D FA      : Logging event (FE): notification_foreground(_nf), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=QtActivity, firebase_screen_id(_si)=8469772288255777039}]
  V FA      : Connection attempt already in progress
  D FA      : Connected to remote service
  V FA      : Processing queued up service tasks: 2
  V FA      : Inactivity, disconnecting from the service
  D FA      : Logging event (FE): notification_receive(_nr), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=QtActivity, firebase_screen_id(_si)=8469772288255777039}]
  V FA      : Connecting to remote service
  D FA      : Logging event (FE): notification_foreground(_nf), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=QtActivity, firebase_screen_id(_si)=8469772288255777039}]
  V FA      : Connection attempt already in progress
  D FA      : Connected to remote service
  V FA      : Processing queued up service tasks: 2
  V FA      : Inactivity, disconnecting from the service

И поэтому я считаю, что моя проблема полностью в самой реализации Qt.IE, не в облаке, не в firebase, но в моей реализации Android Qt.

Вот альбом изображений логарифма android и вывод iphone, показывающий, что андроид невызывая код обратного вызова слушателя, но apple есть.

Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: Я нашел это в моем отчете об ошибке:

12-20 13:28:58.447  1000   877 23636 E NotificationService: Suppressing notification from package by user request.
12-20 13:28:59.312  1000   877  2141 I ActivityManager: Start proc 7778:com.android.documentsui/u0a12 for broadcast com.android.documentsui/.PackageReceiver
12-20 13:28:59.747  1000   877  1972 I ActivityManager: Start proc 7816:android.process.media/u0a13 for broadcast com.android.providers.downloads/.DownloadReceiver
12-20 13:29:04.400  1000   877  1972 W ActivityManager: Invalid packageName: biz.deliverydudes.driverapp
12-20 13:29:14.008  1000   877   894 I ActivityManager: START u0 {flg=0x10000000 cmp=biz.deliverydudes.driverapp/org.qtproject.qt5.android.bindings.QtActivity (has extras)} from uid 2000
12-20 13:29:14.077  1000   877   916 I ActivityManager: Waited long enough for: ServiceRecord{92c0823 u0 org.fdroid.fdroid/.data.InstalledAppProviderService}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...