Expo notifications локальные не работают когда приложение полностью закрыто

Expo — локальные уведомления не работают на устройствах

Я использую EXPO для создания приложения для Android и iOS с React Native. В этом коде наблюдается странное поведение: он правильно работает в приложении Expo, но не работает на реальных устройствах (автономная сборка) (происходит на iOS И Android).

Логика этих локальных уведомлений следующая: Идея состоит в том, чтобы показать пользователю 3 локальных уведомления:

  • Первый, через 1 неделю после последнего открытия приложения пользователем.
  • Второй — через месяц после того, как пользователь в последний раз открывал приложение.
  • Последний, через 2 месяца после последнего открытия приложения пользователем.

Как мне это сделать?

Читайте также:  Как отремонтировать наушники с микрофоном для компьютера с микрофоном

При первом открытии приложения я спрашиваю пользователя, хочет ли она видеть уведомления. Если пользователь говорит ДА, я записываю эту информацию в локальное хранилище, а затем запрашиваю разрешение USER_FACING_NOTIFICATIONS на отображение локальных уведомлений.

Я использую USER_FACING_NOTIFICATIONS , потому что не отправляю удаленные уведомления.

Затем, когда пользователь открывает приложение во второй раз, я делаю следующее:

  • Удаляю все предыдущие уведомления
  • Я проверяю, ХОЧЕТ ли пользователь видеть уведомления
  • Я проверяю, ДАЛИ ли пользователь / устройство разрешения США на показ уведомлений
  • Я планирую 3 уведомления.

Вот все эти utils функции:

Вы понимаете, почему это не могло работать? Я уже открыл приложение, предоставил все разрешения, убил и снова открыл приложение около 1.000 раз, хехехе. Последние месяцы я не открывал приложение 9 дней (делал 3 раза) и ни разу не увидел никаких уведомлений. Но уведомления правильно отображаются в приложении Expo Dev.

Ps .: Я делаю cancelAllScheduled каждый раз, когда пользователь открывает приложение, потому что эти уведомления нужно сбрасывать каждый раз, когда пользователь открывает приложение, потому что я хочу показать это через несколько недель после «последнего открытия приложения»

Ps2 .: Это документация, которой я следовал, чтобы реализовать это:

Источник

Expo — локальные уведомления не работают на устройствах

Я использую EXPO для создания приложения для Android и iOS с React Native. В этом коде странное поведение: он правильно работает в приложении Expo, но не работает на реальных устройствах (автономная сборка) (происходит на iOS и Android).

Логика этих локальных уведомлений следующая: идея состоит в том, чтобы показывать пользователю 3 локальных уведомления:

  • Первый, через 1 неделю после последнего раза, когда пользователь открыл приложение
  • Второй, через 1 месяц после последнего раза, когда пользователь открыл приложение
  • Последний, через 2 месяца после последнего раза, когда пользователь открыл приложение

Как мне это сделать?

При первом запуске приложения я спрашиваю пользователя, хочет ли она видеть уведомления. Если пользователь говорит ДА, я записываю эту информацию в локальное хранилище, а затем запрашиваю USER_FACING_NOTIFICATIONS разрешение показывать локальные уведомления.

я использую USER_FACING_NOTIFICATIONS потому что я не отправляю удаленные уведомления.

Затем, во второй раз, когда пользователь открывает приложение, я делаю следующее:

  • Я удаляю все предыдущие уведомления
  • Я проверяю, хочет ли пользователь видеть уведомления
  • Я проверяю, дали ли пользователю / устройству ДАННЫЕ США разрешения на показ уведомлений
  • Я планирую 3 уведомления.

Здесь часть кода:

Здесь все те utils функции:

Вы видите какую-либо подсказку о том, почему это не может работать? Я уже открыл приложение и предоставил все разрешения и убил и снова открыл приложение близко к 1000 раз хехехе. Последние месяцы я не открывал приложение в течение 9 дней (я делал это 3 раза), и я никогда не видел никакого уведомления. Но уведомления правильно отображаются в приложении Expo Dev.

Ps.: я делаю cancelAllScheduled каждый раз, когда пользователь открывает приложение, потому что эти уведомления должны сбрасываться каждый раз, когда пользователь открывает приложение, потому что я хочу показать через несколько недель после того, как «последний раз приложение было открыто»

PS2.: Это документация, которой я следовал для ее реализации:

Источник

Expo Push-уведомления не появляются в телефонах Android (плавающие уведомления)

EDIT: я обнаружил, что они известны как плавающие уведомления. Кто-нибудь знает, как включить их по умолчанию из приложения (через разрешение и т. д.) На устройстве Android?

в настоящее время я тестирую push-уведомления на устройстве Android и заметил, что, хотя я получаю push-уведомления, они не появляются на экране, но остаются в фоновом режиме (мне нужно перетащить верхнюю строку состояния в соответствии с изображением). Я вижу, что это довольно бесполезно, поскольку пользователь на самом деле не уведомление, если он использует телефон:

на iPhone всплывающее окно отображается правильно без каких-либо проблем.

2 ответов

я, наконец, сделал это, используя Expo.Notifications.createChannelAsync используя priority: «max» и при отправке сообщения добавить channelId: «mychannel» .

чтобы показать так называемое плавающее уведомление, приложение должно иметь разрешение SYSTEM_ALERT_WINDOW.

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

проверьте, если у вас уже есть разрешение

рекомендуемый способ сделать это, используя настройки#canDrawOverlays (контекст).Это разрешение вводится только на уровне API 23. Поэтому в соответствии с doc нет необходимости проверять разрешение на старых устройствах.

однако видно, что это не будет работать хорошо, как ожидалось в некоторых устройствах pre-Marshmallow, таких как Xiaomi Mi 2. Так что лучше сделать это, как показано в этот пост.

возьмите пользователя на страницу настроек, если нет разрешения

Если приложение нацелено на уровень API 23 или выше, пользователь приложения должен явно предоставить это разрешение приложению через экран управления разрешениями. Приложение запрашивает одобрение пользователя, отправив намерение с действием настройки.ACTION_MANAGE_OVERLAY_PERMISSION.

Источник

Expo — Local Notifications not working on devices

I’m using EXPO to create an app for Android and iOS, with React Native. There is a weird behavior in this code: It’s working properly on the Expo App, but it’s not working in the real devices (standalone build) (happening on iOS AND Android).

The logic of these Local notifications is the following: The idea is to show to the user 3 local notifications:

  • The first one, 1 week after the last time the user opened the app
  • The second one, 1 month after the last time the user opened the app
  • The last one, 2 months after the last time the user opened the app

The first time the app is opened, I ask the user if she wants to see notifications. If the user says YES, I write that info in the local storage, and then I request the USER_FACING_NOTIFICATIONS permission to show local notifications.

I’m using USER_FACING_NOTIFICATIONS because I don’t send remote notifications.

Then, the second time the user opens the app, I do the following:

  • I remove all the previous notifications
  • I check if the user WANTS to see notifications
  • I check if the user/device GAVE US permissions to show notifications
  • I schedule the 3 notifications.

Here, part of the code:

Here, all those utils functions:

Do you see any clue about why this could not be working? I already opened the app and granted all the permissions and killed and opened the app again close to 1.000 times hehehe. The last months I didn’t open the app for 9 days (I did it 3 times) and I never saw any notification. But, the notifications are properly shown in the Expo Dev App.

Ps.: I do the cancelAllScheduled every time the user opens the app because these notifications need to be reset every time the user opens the app, due to I want to show then weeks after «the last time app was opened»

Ps2.: This is the documentation I followed to implement it:

Источник

Expo Push Notifications not received when app is closed [SDK 38.0.9] #9748

Comments

JamieS1211 commented Aug 13, 2020

🐛 Bug Report

Summary of Issue

When sending push notifications (managed workflow) to android devices (running a built standalone app), using Expo push notification service, notifications are not delivered when app is closed. These notifications are delivered when the app is in the foreground or background .

Environment — output of expo diagnostics & the platform(s) you’re targeting

Expo CLI 3.24.0 environment info:
System:
OS: Windows 10 10.0.18362
Binaries:
Node: 12.16.0 — C:\Program Files\nodejs\node.EXE
npm: 6.13.7 — C:\Program Files\nodejs\npm.CMD
npmPackages:
expo: 38.0.9 => 38.0.9
react: 16.11.0 => 16.11.0
react-dom: 16.11.0 => 16.11.0
react-native: https://github.com/expo/react-native/archive/sdk-38.0.2.tar.gz => 0.62.2

Reproducible Demo

Steps to Reproduce

  1. Install demo on android device using apk included in demo repo (https://github.com/JamieS1211/Expo-Notification-bug-app/blob/master/Builds/notification-demo-app-a329051fa10249ee9954446488fe7002-signed.apk) OR by:
    • Cloning demo
    • Build app using expo ba
    • Download freshly build apk
  2. Run app open app on phone and copy the expo push token and then close the app
  3. Copy expo push token into ExpoPushNotificationTool at https://expo.io/notifications
  4. Send a test notification using the ExpoPushNotificationTool

Expected Behavior vs Actual Behavior

I would expect a the notification to be received.

The text was updated successfully, but these errors were encountered:

ghost commented Aug 14, 2020 •

The same issue happens to my Huawei P30 Pro, notifications failed to arrive intermittently.
Expo SDK 38
Using the expo-notification package:

JamieS1211 commented Aug 14, 2020

@amber-pli is this dependant on app activity status (closed, background, foreground)? Also, is it working on other android devices? Everything is perfect on my iOS test device and android device provided the app is in the background or foreground. When on my android device and the app is closed the notification doesn’t arrive 100% of the time.

ghost commented Aug 14, 2020 •

@JamieS1211 Mostly the same behaviour as yours (iOS iPhone SE and Android Huawei P30 Pro). With the android device, when the app is closed/killed the notification doesn’t arrive 100% of the time.

In addition: when my app is in the foreground on android device, notification never arrive.

JamieS1211 commented Aug 14, 2020

Does your notification on android arrive when app is in the background and do you use «nextNotificationAPI»? I had an issue because I forgot to add the code for the foreground listener.

Details here: https://docs.expo.io/versions/latest/sdk/notifications/#handling-incoming-notifications-when-the-app-is

ghost commented Aug 14, 2020

@JamieS1211 thanks I think I have missed setNotificationHandler , which should fix the foreground notification issue.

JamieS1211 commented Aug 14, 2020

@amber-pli Glad I could help. Now I can welcome you to the club of notifications being fine except on android devices when the app is closed haha

ghost commented Aug 14, 2020

ghost commented Aug 14, 2020

@JamieS1211 Have you tried SKD38 with legacy notification?

JamieS1211 commented Aug 14, 2020

@amber-pli Thanks for that other bug report, was an interesting read. I am indeed testing on a OnePlus device and suggested by the post. I have however just double checked and disabled «battery optimisation» for my test app and still no luck (also restarted the phone).

I haven’t tried SDK38 with legacy notifications. I was having a large amount of problems before the SDK38 update with notifications, and actually had a draft bug report when I (ironically) got a google notification saying SDK 38 was released. As such I scrapped my bug report and adopted SDK38.

JamieS1211 commented Aug 14, 2020

Having done more reading on the topic and gone through my settings for about 15 minutes I found a setting under «Settings» -> «System» -> «Recent app management» (OnePlus 3 device). By changing this settings to «Normal clear» I was able to receive notifications with the app closed.

I guess the logical next steps should be this:

  1. Give this a warning or disclaimer in the Expo push notification guide to acknowledge this can happen.
  2. Identify any programmatic solution that can be done in Expo or our apps.
  3. Work super hard to try and maintain a close to exhaustive list of the problematic settings on different devices

Источник

Оцените статью