[iOS][Expo Go] Remove legacy code (#14690)
[ios] Migrate all remaining native code
[ios] Remove unnecessary constants binding argument from EXScopedNotificationCategoriesModule (#13546)
[ios] Use stable manifest ID where applicable (#13280)
[ios][notifications] fix: scoped category ID returned from setNotificationCategoryAsync (#12212)* fix: override serializeCategory method * use self method * changelog
[notifications][ios] Scope notification identifiers (#12055)* create method to override request IDs * scope notification request IDs in Expo Go * add method to Presentation header file * r
[notifications][ios] Scope notification identifiers (#12055)* create method to override request IDs * scope notification request IDs in Expo Go * add method to Presentation header file * rename scoping methods to be more general (not just category IDs are scoped) * only scope emitterModule, handlerModule, and presentationModule in Expo Go
show more ...
[notifications][ios] Only scope notification categories in Expo Go (#11651)* create service extension * Scope category ID in client if provided * ONLY scope categories in Expo Go * remove
[notifications][ios] Only scope notification categories in Expo Go (#11651)* create service extension * Scope category ID in client if provided * ONLY scope categories in Expo Go * remove serviceExtensionTimeWillExpire method * modify service entension's CFBundleDisplayName * use '/' as delimiter to match Android * rename CFBundleDisplayName * escape experience ID and category ID * remove extraneous code * remove NSRegularExpression code * [notifications][ios] migrate notification categories (#11789) * extract category creation logic to separate method * migrate '-' delimiter to '/' in Expo Go, and migrate scoped to unscoped in standalones * escape experienceId * extract migration logic to it's own class * escape user-provided category ID in Expo Go * only used EXScopedNotificationSchedulerModule in Expo Go * move all scoping and escaping logic to EXScopedNotificationsUtils * use EXScopedNotificationsUtils in NotificationServiceExtension * search for substring, not regex * move migrations from constructor to static method; only use EXScopedNotificationCategoriesModule in Expo Go * replace replaceAllCategoryIdPrefixesMatching with renameCategoryIdentifiersWithPrefix:withBlock * dont serialize category to create a new one; use UNNotification API directly * use backslash escaping instead of URL encoding * add todo to remove in SDK 47 * add back comment * rename some vars, fix indent * only escape & unescape forward slash * use '//' as delimiter * use '/' as delimiter, use regex * move legacy scope-checking logic to EXScopedNotificationsUtils * only replace legacy scope if anchored to beginning of string * add changelog entry * Update ios/Exponent/Versioned/Core/UniversalModules/EXNotifications/EXScopedNotificationsUtils.m Co-authored-by: James Ide <[email protected]> Co-authored-by: James Ide <[email protected]>
[expo-notifications] Add autoreregistration device push token to Expo servers (#10908)Please consult the pull request for full description and history of this commit.
[expo-notifications] Add useLastNotificationResponse hook (#10883)# Why Idea inspired by @cruzach sounded! https://github.com/expo/expo/pull/10811#pullrequestreview-518819031 # How - Since
[expo-notifications] Add useLastNotificationResponse hook (#10883)# Why Idea inspired by @cruzach sounded! https://github.com/expo/expo/pull/10811#pullrequestreview-518819031 # How - Since there will be two hooks now that depend on the notification response listener being registered in the global scope I moved it to a `SharedNotificationResponseListener.fx.ts` file - Changed `useInitialNotificationResponse` implementation to rely on it - Added the ability to listen for incoming responses to the shared listener - Implemented `useLastNotificationResponse` which is like a notification response swiss knife: - if registered early enough judging by its return values states you can deduce whether there was this special "initial notification response" or not - always returns the latest notification response received (or something falsy, depending on whether you care about the "initiality" or "initialness" of the response you can ignore the difference between `undefined` or `null` or not) Frankly speaking I'm not 100% sure how big of a deal is leaving a dangling listener active, but I can't think of any reason why it would be a problem. # Test Plan I have verified this hook returns latest notification response if the hook is mounted as (early in the app as possible and after some time from starting the app) ✖️ (the app is started in response to notification tap, notification tap while the app is running)
[expo-notifications] Unify data payload across platforms (#10453)# Why Follow up to https://github.com/expo/expo/pull/9164, fixes https://github.com/expo/expo/issues/10070, supersedes https://gi
[expo-notifications] Unify data payload across platforms (#10453)# Why Follow up to https://github.com/expo/expo/pull/9164, fixes https://github.com/expo/expo/issues/10070, supersedes https://github.com/expo/expo/pull/10071. # How Looked at the payload from the developer's perspective and made it so that `content.data` means exactly the same on both platforms (i.e. `body` object from the native `data`/`payload`, coincidentally used by Expo notification services to provide notification data). Not to lose inner details of the notifications I have added a new `payload` field to `PushNotificationTrigger` allowing developers to look inside the untouched payload. # Test Plan Added tests to `test-suite`!
[expo-notifications] feat: add notification categories (interactive notifications) (#9015)* ios implementation * add getCategoriesAsync method * change type and method names based on architec
[expo-notifications] feat: add notification categories (interactive notifications) (#9015)* ios implementation * add getCategoriesAsync method * change type and method names based on architecture proposal * add android boilerplate code * Correct typescript layer according to architecture proposal * first pass at tests * return category after creating it, and clean up parsing code * get iOS tests passing * [ios] add remaining native options functionality * finalize tests for iOS * beginning of android implementation * [android] implement action button feature * fix remote notification category handling * support 'options' argument for notification action * make some changes to follow new additions to architecture proposal * [android] add functionality for actions that don't foreground the app * serialize options so they are returned in an object * change doNotOpenInForeground to opensAppToForeground * [android] text reply actions functionality * [android] pass along user text response with notification * clean up categoryAwareBuilder * rebase master, re-'yarn build' * cleanup iOS * [android] fix test suite tests * docs and changelog * fix typescript typo and rebuild * update readme * reformat java code * rename some java variables * address iOS feedback * address remaining pieces of android feedback * fix client build * docs, readme, and changelog updates * improve tests, test feedback * extract interface, create .native and .web files, and the rest of TS feedback * optimize all java imports * [ios] add scoped notification categories * [ios] remove scope prefix from serialized notification in client * [ios] left this out of previous commit * serialize category identifer on android * [android] scope notification categories in android expo client * fix spelling mistake * [expo client] run pod install * Apply suggestions from code review Co-authored-by: Łukasz Kosmaty <[email protected]> * add andraid NonNull handling * [ios] scope notification serializer * Apply suggestions from code review fix name of category prefix remover method; spacing fixes Co-authored-by: Łukasz Kosmaty <[email protected]> * fix reversed emitted events on iOS, and re- yarn build * fix iOS client build * rebuild JS Co-authored-by: Łukasz Kosmaty <[email protected]>
[expo-notifications][ios] Fix scoped notifications handler (#8588)
[expo-notification][ios] Add ScopedNotificationPresentationModule (#8386)* [expo-notification][ios] Add ScopedNotificationPresentationModule * [expo-notification] Pass to block only experienceId
[expo-notification][ios] Add ScopedSchedulerModule (#8361)* [expo-notification][ios] Add ScopedSchedulerModule * [expo-notifications] Apply requested changes * [expo-notifications] Remove _No
[expo-notification][ios] Add ScopedSchedulerModule (#8361)* [expo-notification][ios] Add ScopedSchedulerModule * [expo-notifications] Apply requested changes * [expo-notifications] Remove _Nonnull attribute * [expo-notifications] Apply requested changes
[expo-notifications] Add scoped notifications handler (#8268)* [expo-notifications][ios] Add EXScopedNotificationsHandlerModule * [expo-notifications][android] Add ScopedNotificationsHandler
[expo-notifications] Add scoped notifications handler (#8268)* [expo-notifications][ios] Add EXScopedNotificationsHandlerModule * [expo-notifications][android] Add ScopedNotificationsHandler * [expo-notification] Fix utils class * [expo-notifications] Apply requested changes
[expo-notifications] Add scoped event emitter (#8265)* [expo-notifications][ios] Add scoped emitter * [expo-notifications][android] Add scoped emitter * [expo-notifications] Rewrite scoped lo
[expo-notifications] Add scoped event emitter (#8265)* [expo-notifications][ios] Add scoped emitter * [expo-notifications][android] Add scoped emitter * [expo-notifications] Rewrite scoped logic * [expo-notifications] Move ScopedNotificationScheduler to different PR * [expo-notifications] Apply requested changes * [expo-notification] Allow unscoped notification