A React Native-specific version of this question was asked, but not answered React-Native: How can I disable all push notifications while my app is active?
Essentially, is there a way to remove interruptions while my app is in the foreground? Ideally there would be a "focus" state I put the app into that minimizes disruptions, but I can't find an API like that.
Concretely, part of my app involves meditation states. Getting popups during one of those is distracting, so I'd like to disable banners and alerts while one of those sessions is running.
Happy to hear it's not possible, just haven't actually found that answer yet.
No, you don't have an API or control over other apps notifications. But surely you can control your app notifications. You can handle those notifications without prompting. Let me know if this is helpful.
Related
I have an Expo app (which has been ejected but there is very little native code being used). I am using expo-notifications to schedule local notifications for the user. I am only doing this for background/killed state notifications. There are no foreground notifications.
I'd like to know if it's possible to turn them on or off when a button is pressed without losing all the notification data in React-native/Expo?
I want to add a toggle in the settings screen to turn notifications on or off and I can't figure out how to do this. I can of course cancel all scheduled notifications with cancelAllScheduledNotificationsAsync, but then if they toggle notifications back on all the existing ones would be lost.
I'm hoping to avoid having to store a bunch of data in AsyncStorage for this.
I'm working on handling this all in push notifications (which will solve a lot of headaches) but that's still a way out from being ready.
On iOS, you can reply to text messages right from the push notification without opening the app. I want to do something similar in React Native, to have the user interact with a custom UI in a push notification without opening the app. At the moment I'm using react-native-onesignal, but I haven't found a way to get this functionality with OneSignal. Does anyone know how I can approach this?
I'm making an app which wants the user to keep the app open and not using other apps (to help them focuses on works), but allows them to turn the phone screen off. I used AppState API to detect if the app running in the background but it also triggered when the screen turned off.
So I need a way to know if the screen is on or off. I tried googling around but I couldn't find any solution.
Firstly, apologies for the slightly open ended questions but I can't find the info I'm looking for in other questions.
I'm trying to understand the lifecycle of a RN app on both iOS and Android. I understand the app bootstraps when you first start it and stays running while the phone is alive, but what happens when the user switches to a different app and comes back, or their screen times out then they switch it back on? It would be really annoying if the app restarted just because they briefly switched to check their email.
My specific use case (not particularly important to this generic question but included for context) is that I'm trying to build a game with socket.io connections and I'm wondering if I can hook into events to see if the app has been in the background or if I even need to. I have found a way of forcing a restart which may be necessary at some points, but I'd rather just try to reconnect things that have disconnected if I can find out when that happens.
Any push in the right direction would be appreciated.
The app doesn't restart when it goes in the background as you describe. The app keeps its state and the user sees the last screen they visited.
You should have a look at react native's AppState
https://facebook.github.io/react-native/docs/appstate
Using AppState you can addEventListeners that capture the change of the app's state like when going to background.
Of course there are also some problems here...
You can't capture the "kill "event. You can only detect if the app is sent to the background but unfortunately you can't detect when the user chooses to "kill" the app
You can't run any code while your app is in the background. This might be serious in your case but you should evaluate it. For example if you have a timer and you sent the app to the background then the timer stops.
Do compiled Expo.io React Native applications support "Always On" background location tracking, even when the app is not in use?
Expo just implemented Background Location
Instead of using the watchPositionAsync method, you will have to utilize TaskManager.defineTask method to register the background task out outside of the React event loop. Then, start the task with Location.startLocationUpdatesAsync.
Short answer is no. Quoting the "Why not expo" page:
Expo apps don’t support background code execution (running code when
the app is not foregrounded or the device is sleeping). This means you
cannot use background geolocation, play audio in the background,
handle push notifications in the background, and more. This is a work
in progress.
You will need to detach your app and add this behavior yourself, still doing so you lose some of the expo capabilities.