Документация
ОС Аврора 5.1.3
Push-уведомления
Получив push-уведомление, приложение сначала проверяет,
не находится ли оно на переднем плане, а затем анализирует поле данных push-уведомления и ищет ключ
mtype
в полученном JSON.
Если mtype
равно:
action
— уведомление не будет отображаться;notify
— будет показан только верхний баннер;system_notify
— уведомление будет отображаться только в центре уведомлений.
При любом другом значении, пустом или даже при отсутствии
mtype
будут показаны оба push-уведомления (баннер и центр уведомлений).
Выбор способа отображения уведомления реализован в методе
processNotifications
класса Application
:
void Application::processNotifications(const Aurora::PushNotifications::PushList &pushList)
{
qDebug() << QStringLiteral("Application %1: got %2 pushes").arg(applicationId()).arg(pushList.count());
for (const Aurora::PushNotifications::Push &push : pushList)
{
qDebug() << "{";
qDebug() << "Title: " << push.title;
qDebug() << "Data: " << push.data;
qDebug() << "Message: " << push.message;
qDebug() << "}";
// Здесь можно отобразить уведомление в графическом интерфейсе, например, добавить как элемент модели списка.
}
auto state = qGuiApp->applicationState(); // qGuiApp — глобальный объект Qt, указывающий на данное приложение.
if (state != Qt::ApplicationActive) // Если приложение работает в фоновом режиме, Push-уведомления будут отображены как уведомления на экране.
{
for (const Aurora::PushNotifications::Push &push : pushList)
{
Notification notification;
notification.setCategory(QString("common"));
auto jsonDcoument = QJsonDocument::fromJson(push.data.toUtf8());
auto type = jsonDcoument.object().value("mtype").toString();
if (type == QStringLiteral("action"))
{
continue;
}
if (type == QStringLiteral("notify"))
{
notification.setPreviewSummary(push.title);
notification.setPreviewBody(push.message);
}
else if (type == QStringLiteral("system_notify"))
{
notification.setSummary(push.title);
notification.setBody(push.message);
}
else
{
notification.setSummary(push.title);
notification.setBody(push.message);
notification.setPreviewSummary(push.title);
notification.setPreviewBody(push.message);
}
notification.publish();
}
}
}