| #
db1c4130 |
| 19-Jun-2020 |
Stanisław Chmiela <[email protected]> |
[expo-notifications] Add preliminary "support" for Web (#8853)
# Why
Even though we don't support Web in `expo-notifications`, we don't want to be a pain to the users and throw errors just becaus
[expo-notifications] Add preliminary "support" for Web (#8853)
# Why
Even though we don't support Web in `expo-notifications`, we don't want to be a pain to the users and throw errors just because of running the code on Web.
# How
Added simple object fallbacks for missing modules on web so that they are queryable by
```ts
if (!Module.methodAsync) {
throw new Unavailability…
}
```
Swapped `.ts` + `.web.ts` for `.native.ts` + `.ts` (or + `.web.ts` + `.ts` where it made sense, eg. if we would need to use `localStorage` inside the `.ts` file I renamed it to `.web.ts` and added an empty fallback in `.ts`).
# Test Plan
- [x] Ran NCL in `bare-expo` on Web, clicked buttons around, noticed the error is readable and makes sense.
- [x] Ran `expo-notifications` test-suite on both iOS and Web. It seems iOS tests are a little bit flaky, unfortunately (the errors could also happen due to erroring Expo API, HTTP error 504 when fetching push token, but I was able to make all of the tests pass just refreshing).
show more ...
|
| #
03846faa |
| 12-Feb-2020 |
Stanisław Chmiela <[email protected]> |
[expo-notifications] Handling notifications (#6796)
# Why
Next `expo-notifications` feature.
# How
- `NotificationsHandlerModule` registers at singleton for new notifications/messages
- fo
[expo-notifications] Handling notifications (#6796)
# Why
Next `expo-notifications` feature.
# How
- `NotificationsHandlerModule` registers at singleton for new notifications/messages
- for each message it _starts up_ a task which emits an event to JS
- in response to the JS event, delegate responds with the appropriate behavior (eg. `shouldShowAlert: true`)
- the behavior is pushed to native side using `NotificationsHandler.handleNotificationAsync` call
- which directs it to the appropriate task
- task handles the behavior (on iOS calls `completionHandler`, on Android it will show the notification once implemented) and finishes
- if for whatever reason delegate didn't respond in 3 seconds, `onTimeout` is called on task, which emits another event to JS (for debugging purposes) and the task finishes

# Test Plan
Tested manually by sending notifications and logging messages that the scheme works both when the delegate responds and when it does not.
show more ...
|