Высокий уровень, с которым я сталкиваюсь, это длинный хвост развития.Я могу найти ответы для 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}