@react-native-firebase/messaging 25.1.0 → 26.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/RNFBMessaging.podspec +20 -6
  3. package/android/build.gradle +24 -0
  4. package/android/src/main/java/io/invertase/firebase/messaging/{ReactNativeFirebaseMessagingModule.java → NativeRNFBTurboMessaging.java} +143 -81
  5. package/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingPackage.java +1 -1
  6. package/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingReceiver.java +16 -0
  7. package/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java +50 -11
  8. package/android/src/main/java/io/invertase/firebase/messaging/generated/java/com/facebook/fbreact/specs/NativeRNFBTurboMessagingSpec.java +151 -0
  9. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/CMakeLists.txt +36 -0
  10. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/RNFBMessagingTurboModules-generated.cpp +152 -0
  11. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/RNFBMessagingTurboModules.h +31 -0
  12. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/react/renderer/components/RNFBMessagingTurboModules/RNFBMessagingTurboModulesJSI-generated.cpp +161 -0
  13. package/android/src/main/java/io/invertase/firebase/messaging/generated/jni/react/renderer/components/RNFBMessagingTurboModules/RNFBMessagingTurboModulesJSI.h +356 -0
  14. package/app.plugin.js +1 -1
  15. package/dist/module/index.js +622 -7
  16. package/dist/module/index.js.map +1 -1
  17. package/dist/module/statics.js +1 -1
  18. package/dist/module/types/internal.js +4 -0
  19. package/dist/module/types/internal.js.map +1 -0
  20. package/dist/module/types/messaging.js +0 -15
  21. package/dist/module/types/messaging.js.map +1 -1
  22. package/dist/module/version.js +1 -1
  23. package/dist/typescript/lib/index.d.ts +182 -5
  24. package/dist/typescript/lib/index.d.ts.map +1 -1
  25. package/dist/typescript/lib/types/internal.d.ts +41 -0
  26. package/dist/typescript/lib/types/internal.d.ts.map +1 -0
  27. package/dist/typescript/lib/types/messaging.d.ts +7 -55
  28. package/dist/typescript/lib/types/messaging.d.ts.map +1 -1
  29. package/dist/typescript/lib/version.d.ts +1 -1
  30. package/ios/RNFBMessaging/RNFBMessaging+AppDelegate.h +24 -2
  31. package/ios/RNFBMessaging/RNFBMessaging+AppDelegate.m +82 -12
  32. package/ios/RNFBMessaging/RNFBMessaging+NSNotificationCenter.m +14 -4
  33. package/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.m +31 -28
  34. package/ios/RNFBMessaging/RNFBMessagingModule.h +3 -2
  35. package/ios/RNFBMessaging/RNFBMessagingModule.mm +500 -0
  36. package/ios/RNFBMessaging.xcodeproj/project.pbxproj +8 -8
  37. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  38. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  39. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  40. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  41. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  42. package/ios/generated/RCTThirdPartyComponentsProvider.mm +23 -0
  43. package/ios/generated/RNFBMessagingTurboModules/RNFBMessagingTurboModules-generated.mm +184 -0
  44. package/ios/generated/RNFBMessagingTurboModules/RNFBMessagingTurboModules.h +222 -0
  45. package/ios/generated/RNFBMessagingTurboModulesJSI-generated.cpp +161 -0
  46. package/ios/generated/RNFBMessagingTurboModulesJSI.h +356 -0
  47. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  48. package/lib/index.ts +821 -15
  49. package/lib/statics.ts +1 -1
  50. package/lib/types/internal.ts +59 -0
  51. package/lib/types/messaging.ts +7 -72
  52. package/lib/version.ts +1 -1
  53. package/package.json +30 -5
  54. package/plugin/build/app.plugin.d.ts +2 -0
  55. package/plugin/build/app.plugin.js +6 -0
  56. package/plugin/src/app.plugin.ts +3 -0
  57. package/plugin/tsconfig.tsbuildinfo +1 -1
  58. package/react-native.config.js +10 -0
  59. package/specs/NativeRNFBTurboMessaging.ts +46 -0
  60. package/typedoc.json +2 -19
  61. package/dist/module/modular.js +0 -396
  62. package/dist/module/modular.js.map +0 -1
  63. package/dist/module/namespaced.js +0 -415
  64. package/dist/module/namespaced.js.map +0 -1
  65. package/dist/typescript/lib/modular.d.ts +0 -255
  66. package/dist/typescript/lib/modular.d.ts.map +0 -1
  67. package/dist/typescript/lib/namespaced.d.ts +0 -12
  68. package/dist/typescript/lib/namespaced.d.ts.map +0 -1
  69. package/ios/RNFBMessaging/RNFBMessagingModule.m +0 -439
  70. package/lib/modular.ts +0 -455
  71. package/lib/namespaced.ts +0 -593
package/lib/statics.ts CHANGED
@@ -1,4 +1,4 @@
1
- // shared between namespaced and modular API
1
+ // Authorization and notification statics for modular API exports
2
2
 
3
3
  /**
4
4
  * Authorization status values returned by the deprecated permission APIs.
@@ -0,0 +1,59 @@
1
+ /*
2
+ * Copyright (c) 2016-present Invertase Limited & Contributors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this library except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ */
17
+
18
+ import type { IOSPermissions, RemoteMessage } from './messaging';
19
+
20
+ /**
21
+ * Wrapped native module contract for `NativeRNFBTurboMessaging`.
22
+ */
23
+ export interface NativeRNFBTurboMessaging {
24
+ getConstants?(): {
25
+ isAutoInitEnabled?: boolean;
26
+ isDeliveryMetricsExportToBigQueryEnabled?: boolean;
27
+ isRegisteredForRemoteNotifications?: boolean;
28
+ isNotificationDelegationEnabled?: boolean;
29
+ };
30
+ isAutoInitEnabled?: boolean;
31
+ isDeliveryMetricsExportToBigQueryEnabled?: boolean;
32
+ isRegisteredForRemoteNotifications?: boolean;
33
+ setAutoInitEnabled(enabled: boolean): Promise<void>;
34
+ getInitialNotification(): Promise<RemoteMessage | null>;
35
+ getDidOpenSettingsForNotification(): Promise<boolean>;
36
+ getIsHeadless(): Promise<boolean>;
37
+ getToken(appName: string, senderId: string): Promise<string>;
38
+ deleteToken(appName: string, senderId: string): Promise<void>;
39
+ requestPermission(permissions: IOSPermissions): Promise<number>;
40
+ registerForRemoteNotifications(): Promise<void>;
41
+ unregisterForRemoteNotifications(): Promise<void>;
42
+ getAPNSToken(): Promise<string | null>;
43
+ setAPNSToken(token: string, type?: string): Promise<void>;
44
+ hasPermission(): Promise<number>;
45
+ completeNotificationProcessing(): void;
46
+ signalBackgroundMessageHandlerSet(): void;
47
+ sendMessage(options: Record<string, unknown>): Promise<void>;
48
+ subscribeToTopic(topic: string): Promise<void>;
49
+ unsubscribeFromTopic(topic: string): Promise<void>;
50
+ setDeliveryMetricsExportToBigQuery(enabled: boolean): Promise<void>;
51
+ isNotificationDelegationEnabled(): Promise<boolean>;
52
+ setNotificationDelegationEnabled(enabled: boolean): Promise<void>;
53
+ }
54
+
55
+ declare module '@react-native-firebase/app/dist/module/internal/NativeModules' {
56
+ interface ReactNativeFirebaseNativeModules {
57
+ NativeRNFBTurboMessaging: NativeRNFBTurboMessaging;
58
+ }
59
+ }
@@ -16,11 +16,6 @@
16
16
  */
17
17
 
18
18
  import type { ReactNativeFirebase } from '@react-native-firebase/app';
19
- import {
20
- AuthorizationStatus as AuthorizationStatusConst,
21
- NotificationAndroidPriority as NotificationAndroidPriorityConst,
22
- NotificationAndroidVisibility as NotificationAndroidVisibilityConst,
23
- } from '../statics';
24
19
 
25
20
  // ============ Types ============
26
21
 
@@ -582,6 +577,13 @@ export interface Messaging extends ReactNativeFirebase.FirebaseModule {
582
577
  * On iOS, if your app wants to receive remote messages from FCM (via APNs), you must explicitly register
583
578
  * with APNs if auto-registration has been disabled.
584
579
  *
580
+ * On **ARM64 iOS Simulator**, UIKit registration is skipped intentionally so the main thread
581
+ * cannot wedge; the call may reject with `messaging/registration-timeout` after ~10s and will
582
+ * not produce a real APNs token. Use a physical device for end-to-end push. Overlapping calls
583
+ * reject the earlier attempt with `messaging/registration-superseded`.
584
+ * `requestPermission`'s APNs side-effect is also skipped on ARM64 Simulator but that Promise
585
+ * still resolves with `AuthorizationStatus` (it does not reject with these codes).
586
+ *
585
587
  * > You can safely call this method on Android without platform checks. It's a no-op on Android and will promise resolve `void`.
586
588
  */
587
589
  registerDeviceForRemoteMessages(): Promise<void>;
@@ -726,70 +728,3 @@ export interface Messaging extends ReactNativeFirebase.FirebaseModule {
726
728
  */
727
729
  isSupported(): Promise<boolean>;
728
730
  }
729
-
730
- // ============ Statics Interface ============
731
-
732
- /**
733
- * Static properties available on firebase.messaging
734
- */
735
-
736
- export interface Statics {
737
- SDK_VERSION: string;
738
- /** @deprecated See {@link https://github.com/invertase/react-native-firebase/issues/6283 #6283}. */
739
- AuthorizationStatus: typeof AuthorizationStatusConst;
740
- NotificationAndroidPriority: typeof NotificationAndroidPriorityConst;
741
- NotificationAndroidVisibility: typeof NotificationAndroidVisibilityConst;
742
- }
743
-
744
- // ============ Module Augmentation ============
745
- /* eslint-disable @typescript-eslint/no-namespace */
746
- declare module '@react-native-firebase/app' {
747
- namespace ReactNativeFirebase {
748
- interface Module {
749
- messaging: FirebaseModuleWithStaticsAndApp<Messaging, Statics>;
750
- }
751
- interface FirebaseApp {
752
- messaging(): Messaging;
753
- }
754
- }
755
- }
756
-
757
- // ============ Backwards Compatibility Namespace ============
758
-
759
- /* eslint-disable @typescript-eslint/no-namespace */
760
- type _Messaging = Messaging;
761
- type _MessagingStatics = Statics;
762
- type _RemoteMessage = RemoteMessage;
763
- type _MessagePriority = MessagePriority;
764
- type _FcmOptions = FcmOptions;
765
- type _NativeTokenOptions = NativeTokenOptions;
766
- type _GetTokenOptions = GetTokenOptions;
767
- type _Notification = Notification;
768
- type _NotificationPayload = NotificationPayload;
769
- type _NotificationIOSCriticalSound = NotificationIOSCriticalSound;
770
- type _NotificationAndroidPriority = NotificationAndroidPriority;
771
- type _NotificationAndroidVisibility = NotificationAndroidVisibility;
772
- type _IOSPermissions = IOSPermissions;
773
- type _AuthorizationStatus = AuthorizationStatus;
774
- type _SendErrorEvent = SendErrorEvent;
775
-
776
- export namespace FirebaseMessagingTypes {
777
- export type Module = _Messaging;
778
- export type Statics = _MessagingStatics;
779
- export type RemoteMessage = _RemoteMessage;
780
- export type MessagePriority = _MessagePriority;
781
- export type FcmOptions = _FcmOptions;
782
- export type NativeTokenOptions = _NativeTokenOptions;
783
- export type GetTokenOptions = _GetTokenOptions;
784
- export type Notification = _Notification;
785
- export type NotificationPayload = _NotificationPayload;
786
- export type NotificationIOSCriticalSound = _NotificationIOSCriticalSound;
787
- export type NotificationAndroidPriority = _NotificationAndroidPriority;
788
- export type NotificationAndroidVisibility = _NotificationAndroidVisibility;
789
- /** @deprecated See {@link https://github.com/invertase/react-native-firebase/issues/6283 #6283}. */
790
- export type IOSPermissions = _IOSPermissions;
791
- /** @deprecated See {@link https://github.com/invertase/react-native-firebase/issues/6283 #6283}. */
792
- export type AuthorizationStatus = _AuthorizationStatus;
793
- export type SendErrorEvent = _SendErrorEvent;
794
- }
795
- /* eslint-enable @typescript-eslint/no-namespace */
package/lib/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by genversion.
2
- export const version = '25.1.0';
2
+ export const version = '26.0.0';
package/package.json CHANGED
@@ -1,17 +1,34 @@
1
1
  {
2
2
  "name": "@react-native-firebase/messaging",
3
- "version": "25.1.0",
3
+ "version": "26.0.0",
4
4
  "author": "Invertase <oss@invertase.io> (http://invertase.io)",
5
5
  "description": "React Native Firebase - React Native Firebase provides native integration of Firebase Cloud Messaging (FCM) for both Android & iOS. FCM is a cost free service, allowing for server-device and device-device communication. The React Native Firebase Messaging module provides a simple JavaScript API to interact with FCM.",
6
6
  "main": "./dist/module/index.js",
7
7
  "types": "./dist/typescript/lib/index.d.ts",
8
+ "codegenConfig": {
9
+ "name": "RNFBMessagingTurboModules",
10
+ "type": "modules",
11
+ "jsSrcsDir": "specs",
12
+ "includesGeneratedCode": true,
13
+ "android": {
14
+ "javaPackageName": "io.invertase.firebase.messaging"
15
+ },
16
+ "ios": {
17
+ "modulesProvider": {
18
+ "NativeRNFBTurboMessaging": "RNFBMessagingModule"
19
+ }
20
+ }
21
+ },
8
22
  "scripts": {
9
23
  "build": "genversion --esm --semi lib/version.ts",
10
24
  "build:clean": "rimraf android/build && rimraf ios/build",
11
25
  "build:plugin": "rimraf plugin/build && tsc --build plugin",
12
26
  "lint:plugin": "eslint plugin/src/*",
13
27
  "compile": "bob build",
14
- "prepare": "yarn run build && yarn compile && yarn run build:plugin"
28
+ "prepare": "yarn run build && yarn compile && yarn run build:plugin",
29
+ "codegen": "yarn android:codegen && yarn ios:codegen",
30
+ "android:codegen": "npx @react-native-community/cli codegen --platform android --outputPath=./android/src/main/java/io/invertase/firebase/messaging/generated",
31
+ "ios:codegen": "npx @react-native-community/cli codegen --platform ios --outputPath=./ios/generated"
15
32
  },
16
33
  "repository": {
17
34
  "type": "git",
@@ -25,10 +42,11 @@
25
42
  "messaging"
26
43
  ],
27
44
  "peerDependencies": {
28
- "@react-native-firebase/app": "25.1.0",
45
+ "@react-native-firebase/app": "26.0.0",
29
46
  "expo": ">=47.0.0"
30
47
  },
31
48
  "devDependencies": {
49
+ "@react-native-firebase/app": "26.0.0",
32
50
  "expo": "^55.0.18",
33
51
  "react-native-builder-bob": "^0.41.0",
34
52
  "typescript": "^6.0.3"
@@ -48,7 +66,14 @@
48
66
  "types": "./dist/typescript/lib/index.d.ts",
49
67
  "default": "./dist/module/index.js"
50
68
  },
51
- "./app.plugin.js": "./app.plugin.js",
69
+ "./app.plugin": {
70
+ "types": "./plugin/build/app.plugin.d.ts",
71
+ "default": "./app.plugin.js"
72
+ },
73
+ "./app.plugin.js": {
74
+ "types": "./plugin/build/app.plugin.d.ts",
75
+ "default": "./app.plugin.js"
76
+ },
52
77
  "./package.json": "./package.json"
53
78
  },
54
79
  "react-native-builder-bob": {
@@ -73,5 +98,5 @@
73
98
  "node_modules/",
74
99
  "dist/"
75
100
  ],
76
- "gitHead": "e0a565d8a73a9b103d140ffacfb8876b30d8bdc5"
101
+ "gitHead": "2a360acb2aebdd39dd40e31be386b30697270626"
77
102
  }
@@ -0,0 +1,2 @@
1
+ import plugin from './index';
2
+ export = plugin;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const index_1 = __importDefault(require("./index"));
6
+ module.exports = index_1.default;
@@ -0,0 +1,3 @@
1
+ import plugin from './index';
2
+
3
+ export = plugin;
@@ -1 +1 @@
1
- {"root":["./src/index.ts","./src/android/index.ts","./src/android/setupFirebaseNotifationIcon.ts"],"version":"6.0.3"}
1
+ {"root":["./src/app.plugin.ts","./src/index.ts","./src/android/index.ts","./src/android/setupFirebaseNotifationIcon.ts"],"version":"6.0.3"}
@@ -0,0 +1,10 @@
1
+ module.exports = {
2
+ dependency: {
3
+ platforms: {
4
+ android: {
5
+ cmakeListsPath:
6
+ './src/main/java/io/invertase/firebase/messaging/generated/jni/CMakeLists.txt',
7
+ },
8
+ },
9
+ },
10
+ };
@@ -0,0 +1,46 @@
1
+ /* eslint-disable @typescript-eslint/no-wrapper-object-types */
2
+ import type { TurboModule } from 'react-native';
3
+ import { TurboModuleRegistry } from 'react-native';
4
+
5
+ export interface IOSPermissions {
6
+ alert?: boolean;
7
+ announcement?: boolean;
8
+ badge?: boolean;
9
+ carPlay?: boolean;
10
+ criticalAlert?: boolean;
11
+ provisional?: boolean;
12
+ sound?: boolean;
13
+ providesAppNotificationSettings?: boolean;
14
+ }
15
+
16
+ export interface Spec extends TurboModule {
17
+ getConstants(): {
18
+ isAutoInitEnabled: boolean;
19
+ isDeliveryMetricsExportToBigQueryEnabled: boolean;
20
+ isRegisteredForRemoteNotifications?: boolean;
21
+ isNotificationDelegationEnabled?: boolean;
22
+ };
23
+
24
+ getInitialNotification(): Promise<Object | null>;
25
+ getDidOpenSettingsForNotification(): Promise<boolean>;
26
+ setAutoInitEnabled(enabled: boolean): Promise<void>;
27
+ signalBackgroundMessageHandlerSet(): void;
28
+ completeNotificationProcessing(): void;
29
+ getToken(appName: string, senderId: string): Promise<string>;
30
+ deleteToken(appName: string, senderId: string): Promise<void>;
31
+ getAPNSToken(): Promise<string | null>;
32
+ setAPNSToken(token: string, type?: string): Promise<void>;
33
+ getIsHeadless(): Promise<boolean>;
34
+ requestPermission(permissions: IOSPermissions): Promise<number>;
35
+ registerForRemoteNotifications(): Promise<void>;
36
+ unregisterForRemoteNotifications(): Promise<void>;
37
+ hasPermission(): Promise<number>;
38
+ sendMessage(remoteMessageMap: Object): Promise<void>;
39
+ subscribeToTopic(topic: string): Promise<void>;
40
+ unsubscribeFromTopic(topic: string): Promise<void>;
41
+ setDeliveryMetricsExportToBigQuery(enabled: boolean): Promise<void>;
42
+ setNotificationDelegationEnabled(enabled: boolean): Promise<void>;
43
+ isNotificationDelegationEnabled(): Promise<boolean>;
44
+ }
45
+
46
+ export default TurboModuleRegistry.getEnforcing<Spec>('NativeRNFBTurboMessaging');
package/typedoc.json CHANGED
@@ -1,22 +1,5 @@
1
1
  {
2
2
  "$schema": "https://typedoc.org/schema.json",
3
- "entryPoints": ["lib/modular.ts", "lib/types/messaging.ts"],
4
- "tsconfig": "tsconfig.json",
5
- "intentionallyNotExported": [
6
- "_AuthorizationStatus",
7
- "_FcmOptions",
8
- "_GetTokenOptions",
9
- "_IOSPermissions",
10
- "_MessagePriority",
11
- "_Messaging",
12
- "_NativeTokenOptions",
13
- "_Notification",
14
- "_NotificationAndroidPriority",
15
- "_NotificationAndroidVisibility",
16
- "_NotificationIOSCriticalSound",
17
- "_NotificationPayload",
18
- "_RemoteMessage",
19
- "_SendErrorEvent",
20
- "_MessagingStatics"
21
- ]
3
+ "entryPoints": ["lib/index.ts", "lib/types/messaging.ts"],
4
+ "tsconfig": "tsconfig.json"
22
5
  }