#android #ionic-framework
Вопрос:
Я надеюсь, что эксперты по Android знают, как мне помочь. Я работаю с Push-уведомлениями (я отправляю их почтальону с помощью сервиса FCM), дело в том, что, пока приложение находится в фоновом режиме, все работает отлично(я имею в виду, что они отображаются правильно и перенаправляются на нужные мне страницы), однако, когда приложение находится на переднем плане, они выглядят превосходно, но когда вы прикасаетесь к ним, они абсолютно ничего не делают. Я очень новичок в Android studio, так как это рабочий проект, и я учусь по ходу дела, любая помощь или объяснение очень ценятся. Я покажу вам немного моего кода ниже.
Это отлично работает, когда приложение находится в фоновом режиме
ИЗМЕНИТЬ: ФАКТИЧЕСКИЙ КОД
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("msg", "onMessageReceived: " remoteMessage.getData().get("message"));
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
String channelId = "Default";
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(remoteMessage.getNotification().getTitle())
.setContentText(remoteMessage.getNotification().getBody()).setAutoCancel(true).setContentIntent(pendingIntent);;
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(channelId, "Default channel", NotificationManager.IMPORTANCE_DEFAULT);
manager.createNotificationChannel(channel);
}
manager.notify(23, builder.build());
}
}
Однако я думаю, что часть проблемы связана с тем фактом, что этот блок кода никогда не выполняется, но странно то, что выполняется прослушиватель pushNotificationActionPerformed
НЕ РАБОТАЙ:
PushNotifications.addListener(
'pushNotificationReceived',
(notification: PushNotificationSchema) => {
alert('Llegó una notificación!!!');
if (notification amp;amp; Capacitor.getPlatform() === 'android') {
this.createLocalNotification(notification);
}
}
);
работа:
PushNotifications.addListener(
'pushNotificationActionPerformed',
(notification: ActionPerformed) => {
alert('Llegó una notificación!!!');
const data = notification.notification.data;
if (data.ticket) {
const ticketParsed = JSON.parse(data.ticket);
this.store.dispatch(new StoreSelectedTicket(ticketParsed));
this.router.navigate(['/support/ticket-status']);
}
if (data.statement) {
const parsedStatement = JSON.parse(data.statement);
this.downloadStatements(parsedStatement.link);
}
if (data.deposit) {
const parsedDeposit = JSON.parse(data.deposit);
this.store.dispatch(new StoreSelectedDeposit(parsedDeposit));
this.router.navigate(['/deposits/daily-detail/detail-by-reference-number']);
}
}
);
}
Ответ №1:
Я предполагаю, что следующие причины могут быть следующими:
Во-первых, флаг для намерения, которое передается в ожидающем намерении, должен быть либо Intent.FLAG_ACTIVITY_NEW_TASK
или Intent.FLAG_ACTIVITY_CLEAR_TASK
Во-вторых, последний параметр для pendingIntent
может быть 0
, если вам не нужно FLAG_ONE_SHOT
что-то конкретное.
В-третьих, используйте ненулевое уникальное целое число для manager.notify(non-zero-integer,builder.build)
Вы можете проверить более подробную информацию в официальной документации
Комментарии:
1. Спасибо за ответ!! Ваш ответ очень близок к решению моей проблемы. Теперь, когда я нажимаю на уведомление, приложение перезапускается, это не то поведение, которое я ищу, но, по крайней мере, теперь оно что-то делает! Я не знаю, что еще это может быть
2. @MartinRios Не могли бы вы добавить, как выглядит ваш новый код?
3. Конечно! теперь отредактируйте сообщение
4. @MartinRios Я думаю, что вам не нужно использовать оба флага для намерения, достаточно только одного флага. Или
Intent.FLAG_ACTIVITY_NEW_TASK
илиIntent.FLAG_ACTIVITY_CLEAR_TASK
. Я не являюсь разработчиком ionic, поэтому не могу сказать об ионном коде.5. Большое спасибо за вашу помощь c: