react-native-netmera 1.6.2 → 1.6.3

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.
package/README.md CHANGED
@@ -215,6 +215,19 @@ export const onPushReceive = async (message) => {
215
215
  pod "Netmera/NotificationContentExtension", "3.14.10-WithoutDependency"
216
216
  ```
217
217
 
218
+ 5. In order to use the widget URL callback, add these methods to between `@implementation AppDelegate` and `@end`.
219
+
220
+ ```
221
+ // Required code block to handle widget URL's in React Native
222
+ - (BOOL)shouldHandleOpenURL:(NSURL *)url forPushObject:(NetmeraPushObject *)object {
223
+ return NO;
224
+ }
225
+
226
+ - (void)handleOpenURL:(NSURL *)url forPushObject:(NetmeraPushObject *)object {
227
+ [RNNetmeraRCTEventEmitter handleOpenURL:url forPushObject:object];
228
+ }
229
+ ```
230
+
218
231
  ### Setup - React Native Part
219
232
 
220
233
  1. Create a new `NetmeraPushHeadlessTask.ts` inside your React Native project.
@@ -351,6 +364,16 @@ You can send your events as follows. For more examples, please see the [example
351
364
  }
352
365
  ```
353
366
 
367
+ ##### Widget URL Callback
368
+
369
+ In order to use the widget URL callback, use `onWidgetUrlTriggered` method as follows.
370
+
371
+ ```
372
+ Netmera.onWidgetUrlTriggered(url => {
373
+ console.log('Netmera triggered widget url: ', url);
374
+ });
375
+ ```
376
+
354
377
  ##### Push Notification Permissions
355
378
 
356
379
  If you don't request notification permission at runtime, you can request it by calling the `requestPushNotificationAuthorization()` method.
package/RNNetmera.podspec CHANGED
@@ -18,6 +18,6 @@ Pod::Spec.new do |s|
18
18
  s.requires_arc = true
19
19
 
20
20
  s.dependency 'React'
21
- s.dependency 'Netmera','3.18.0-WithoutDependency'
21
+ s.dependency 'Netmera','3.22.0-WithoutDependency'
22
22
  end
23
23
 
@@ -7,6 +7,7 @@
7
7
  <option name="testRunner" value="GRADLE" />
8
8
  <option name="distributionType" value="DEFAULT_WRAPPED" />
9
9
  <option name="externalProjectPath" value="$PROJECT_DIR$" />
10
+ <option name="gradleJvm" value="jbr-17" />
10
11
  </GradleProjectSettings>
11
12
  </option>
12
13
  </component>
@@ -1,4 +1,3 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
1
  <project version="4">
3
2
  <component name="ProjectRootManager" version="2" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
4
3
  <output url="file://$PROJECT_DIR$/build/classes" />
@@ -15,8 +15,8 @@ android {
15
15
  }
16
16
 
17
17
  dependencies {
18
- implementation 'com.netmera:nmcore:3.10.4'
19
- implementation 'com.netmera:nmfcm:3.10.2'
20
- implementation 'com.netmera:nmhms:3.10.1'
18
+ implementation 'com.netmera:nmcore:3.11.3'
19
+ implementation 'com.netmera:nmfcm:3.11.0'
20
+ implementation 'com.netmera:nmhms:3.11.0'
21
21
  implementation 'com.facebook.react:react-native:+'
22
22
  }
@@ -23,7 +23,7 @@ public class RNNetmera {
23
23
  static void setNetmeraHeaders() {
24
24
  ContentValues headerValues = new ContentValues();
25
25
  headerValues.put("X-netmera-framework", "react");
26
- headerValues.put("X-netmera-frameworkV", "1.6.2");
26
+ headerValues.put("X-netmera-frameworkV", "1.6.3");
27
27
  Netmera.setNetmeraHeaders(headerValues);
28
28
  }
29
29
 
@@ -2,15 +2,16 @@ package com.netmera.reactnativesdk;
2
2
 
3
3
  import android.content.Context;
4
4
 
5
- import com.google.firebase.FirebaseApp;
6
5
  import com.netmera.NetmeraConfiguration;
7
6
  import com.netmera.callbacks.NMInAppMessageActionCallbacks;
8
7
  import com.netmera.callbacks.NMPushActionCallbacks;
8
+ import com.netmera.callbacks.NMWebWidgetCallbacks;
9
9
 
10
10
  public class RNNetmeraConfiguration {
11
11
 
12
12
  NMInAppMessageActionCallbacks nmInAppMessageActionCallbacks;
13
13
  NMPushActionCallbacks nmPushActionCallbacks;
14
+ NMWebWidgetCallbacks nmWebWidgetCallbacks;
14
15
  Context context;
15
16
  String baseUrl;
16
17
  String huaweiSenderId;
@@ -20,6 +21,7 @@ public class RNNetmeraConfiguration {
20
21
 
21
22
  private RNNetmeraConfiguration(Builder builder) {
22
23
  this.nmInAppMessageActionCallbacks = builder.nmInAppMessageActionCallbacks;
24
+ this.nmWebWidgetCallbacks = builder.nmWebWidgetCallbacks;
23
25
  this.nmPushActionCallbacks = builder.nmPushActionCallbacks;
24
26
  this.context = builder.context;
25
27
  this.baseUrl = builder.baseUrl;
@@ -35,6 +37,11 @@ public class RNNetmeraConfiguration {
35
37
  this.nmPushActionCallbacks :
36
38
  new RNNetmeraPushBroadcastReceiver();
37
39
 
40
+ NMWebWidgetCallbacks nmWebWidgetCallbacks =
41
+ this.nmWebWidgetCallbacks != null ?
42
+ this.nmWebWidgetCallbacks :
43
+ new RNNetmeraWebWidgetCallbacks();
44
+
38
45
  NetmeraConfiguration.Builder builder = new NetmeraConfiguration.Builder();
39
46
 
40
47
  if (firebaseSenderId != null) {
@@ -60,12 +67,14 @@ public class RNNetmeraConfiguration {
60
67
  return builder.logging(logging)
61
68
  .disableSerializeRule(true)
62
69
  .nmPushActionCallbacks(nmPushActionCallbacks)
70
+ .nmWebWidgetCallbacks(nmWebWidgetCallbacks)
63
71
  .build(context);
64
72
  }
65
73
 
66
74
  public static class Builder {
67
75
  private NMInAppMessageActionCallbacks nmInAppMessageActionCallbacks;
68
76
  private NMPushActionCallbacks nmPushActionCallbacks;
77
+ private NMWebWidgetCallbacks nmWebWidgetCallbacks;
69
78
  private Context context;
70
79
  private String baseUrl;
71
80
  private String huaweiSenderId;
@@ -83,6 +92,11 @@ public class RNNetmeraConfiguration {
83
92
  return this;
84
93
  }
85
94
 
95
+ public Builder nmWebWidgetCallbacks(NMWebWidgetCallbacks nmWebWidgetCallbacks) {
96
+ this.nmWebWidgetCallbacks = nmWebWidgetCallbacks;
97
+ return this;
98
+ }
99
+
86
100
  public Builder baseUrl(String baseUrl) {
87
101
  this.baseUrl = baseUrl;
88
102
  return this;
@@ -1,8 +1,7 @@
1
1
  //
2
2
  // RNNetmeraModule.java
3
- // Netmera SDK
4
3
  //
5
- // Created by Huseyin Kocoglu on 22.04.2019.
4
+ // Created by Initial Code
6
5
  // Copyright © 2019 Netmera. All rights reserved.
7
6
  //
8
7
 
@@ -18,6 +17,7 @@ import com.facebook.react.bridge.ReactApplicationContext;
18
17
  import com.facebook.react.bridge.ReactContextBaseJavaModule;
19
18
  import com.facebook.react.bridge.ReactMethod;
20
19
  import com.facebook.react.bridge.ReadableMap;
20
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
21
21
  import com.netmera.Netmera;
22
22
  import com.netmera.NetmeraCategory;
23
23
  import com.netmera.NetmeraError;
@@ -549,4 +549,8 @@ public class RNNetmeraModule extends ReactContextBaseJavaModule {
549
549
  private boolean hasKey(ReadableMap map, String key) {
550
550
  return map.hasKey(key) && !map.isNull(key);
551
551
  }
552
+
553
+ public static void emitEvent(String eventName, String eventData) {
554
+ reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, eventData);
555
+ }
552
556
  }
@@ -0,0 +1,27 @@
1
+ package com.netmera.reactnativesdk;
2
+
3
+ import com.netmera.callbacks.NMWebWidgetCallbacks;
4
+
5
+ public class RNNetmeraWebWidgetCallbacks implements NMWebWidgetCallbacks {
6
+ private static final String ON_WIDGET_URL_TRIGGERED = "onWidgetUrlTriggered";
7
+
8
+ @Override
9
+ public void onDeeplinkTriggered(String s) {
10
+ RNNetmeraModule.emitEvent(ON_WIDGET_URL_TRIGGERED, s);
11
+ }
12
+
13
+ @Override
14
+ public void onOpenUrlTriggered(String s) {
15
+ RNNetmeraModule.emitEvent(ON_WIDGET_URL_TRIGGERED, s);
16
+ }
17
+
18
+ @Override
19
+ public void onWebWidgetShown(String s) {
20
+ // There is no equivalent for this feature in iOS
21
+ }
22
+
23
+ @Override
24
+ public void onWebWidgetDismiss(String s) {
25
+ // There is no equivalent for this feature in iOS
26
+ }
27
+ }
package/ios/RNNetmera.m CHANGED
@@ -48,7 +48,7 @@ NSString *const ERROR_MESSAGE_COUPON_FETCH = @"Error occurred while fetching cou
48
48
 
49
49
  + (void)setNetmeraHeaders {
50
50
  [Netmera setFramework:@"react"];
51
- [Netmera setFrameworkVersion:@"1.6.2"];
51
+ [Netmera setFrameworkVersion:@"1.6.3"];
52
52
  }
53
53
 
54
54
  + (void)setPushDelegate:(NSObject<NetmeraPushDelegate> *)delegate {
@@ -1,13 +1,13 @@
1
1
  //
2
2
  // RNNetmeraRCTEventEmitter.h
3
- // Netmera SDK
4
3
  //
5
- // Created by Huseyin Kocoglu on 22.04.2019.
4
+ // Created by Initial Code
6
5
  // Copyright © 2019 Netmera. All rights reserved.
7
6
  //
8
7
 
9
8
  #import <React/RCTBridgeModule.h>
10
9
  #import <React/RCTEventEmitter.h>
10
+ #import <Netmera/Netmera.h>
11
11
 
12
12
  @interface RNNetmeraRCTEventEmitter : RCTEventEmitter <RCTBridgeModule>
13
13
 
@@ -15,6 +15,7 @@
15
15
  +(void) onPushReceive:(NSDictionary*)dict;
16
16
  +(void) onPushDismiss:(NSDictionary*)dict;
17
17
  +(void) onPushOpen:(NSDictionary *)dict;
18
+ +(void) handleOpenURL:(NSURL *)url forPushObject:(NetmeraPushObject *)object;
18
19
 
19
20
  @end
20
21
 
@@ -1,8 +1,7 @@
1
1
  //
2
2
  // RNNetmeraRCTEventEmitter.m
3
- // Netmera SDK
4
3
  //
5
- // Created by Huseyin Kocoglu on 22.04.2019.
4
+ // Created by Initial Code
6
5
  // Copyright © 2019 Netmera. All rights reserved.
7
6
  //
8
7
 
@@ -46,7 +45,7 @@ NSDictionary* waitingOnPushDismiss = nil;
46
45
 
47
46
  - (NSArray<NSString *> *)supportedEvents
48
47
  {
49
- return @[@"onPushReceive", @"onPushOpen", @"onPushRegister", @"onPushDismiss"];
48
+ return @[@"onWidgetUrlTriggered", @"onPushReceive", @"onPushOpen", @"onPushRegister", @"onPushDismiss"];
50
49
  }
51
50
 
52
51
  + (BOOL)requiresMainQueueSetup
@@ -69,16 +68,23 @@ NSDictionary* waitingOnPushDismiss = nil;
69
68
  }
70
69
  }
71
70
 
71
+ + (void)handleOpenURL:(NSURL *)url forPushObject:(NetmeraPushObject *)object {
72
+ if (object.pushType == NetmeraPushTypeWebWidget) {
73
+ NSDictionary* urlDictionary = @{@"url" : url.absoluteString};
74
+ [[NSNotificationCenter defaultCenter] postNotificationName:@"onWidgetUrlTriggered" object:nil userInfo:urlDictionary];
75
+ }
76
+ }
77
+
72
78
  + (void)onPushRegister:(NSDictionary *)body {
73
79
  NSData *deviceToken = body[@"pushToken"];
74
80
  const unsigned char *bytes = deviceToken.bytes;
75
-
81
+
76
82
  NSMutableString *deviceTokenString = [NSMutableString string];
77
83
  for (NSUInteger i = 0; i < deviceToken.length; i++) {
78
84
  [deviceTokenString appendFormat:@"%02x", bytes[i]];
79
85
  }
80
86
  NSDictionary* pushToken = @{@"pushToken" : deviceTokenString};
81
-
87
+
82
88
  if (isReactBridgeInitialized) {
83
89
  [[NSNotificationCenter defaultCenter] postNotificationName:@"onPushRegister" object:nil userInfo:pushToken];
84
90
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-netmera",
3
- "version": "1.6.2",
3
+ "version": "1.6.3",
4
4
  "description": "Netmera React Native SDK",
5
5
  "main": "index.ts",
6
6
  "author": "netmera",
package/src/Netmera.ts CHANGED
@@ -4,10 +4,10 @@
4
4
 
5
5
  import {
6
6
  AppRegistry,
7
+ DeviceEventEmitter,
7
8
  NativeEventEmitter,
8
9
  NativeModules,
9
10
  NativeModulesStatic,
10
- Platform,
11
11
  } from "react-native";
12
12
  import NetmeraUser from "./models/NetmeraUser";
13
13
  import NetmeraEvent from "./models/NetmeraEvent";
@@ -19,6 +19,7 @@ import NMInboxStatusCountFilter from "./models/NMInboxStatusCountFilter";
19
19
  import NMCategoryPreference from "./models/NMCategoryPreference";
20
20
  import { NMInboxStatus } from "./models/NMInboxStatus";
21
21
  import NetmeraCouponObject from "./models/NetmeraCouponObject";
22
+ import { isAndroid } from "./utils/DeviceUtils";
22
23
 
23
24
  const { RNNetmera, RNNetmeraRCTEventEmitter }: NativeModulesStatic =
24
25
  NativeModules;
@@ -36,7 +37,7 @@ export default class Netmera {
36
37
  onCarouselObjectSelected?: (message: string) => Promise<void>
37
38
  ) => {
38
39
  if (onPushRegister) {
39
- if (Platform.OS === "android") {
40
+ if (isAndroid()) {
40
41
  AppRegistry.registerHeadlessTask(
41
42
  "onPushRegister",
42
43
  () => onPushRegister
@@ -46,28 +47,28 @@ export default class Netmera {
46
47
  }
47
48
  }
48
49
  if (onPushReceive) {
49
- if (Platform.OS === "android") {
50
+ if (isAndroid()) {
50
51
  AppRegistry.registerHeadlessTask("onPushReceive", () => onPushReceive);
51
52
  } else {
52
53
  netmeraRCTEventEmitter.addListener("onPushReceive", onPushReceive);
53
54
  }
54
55
  }
55
56
  if (onPushOpen) {
56
- if (Platform.OS === "android") {
57
+ if (isAndroid()) {
57
58
  AppRegistry.registerHeadlessTask("onPushOpen", () => onPushOpen);
58
59
  } else {
59
60
  netmeraRCTEventEmitter.addListener("onPushOpen", onPushOpen);
60
61
  }
61
62
  }
62
63
  if (onPushDismiss) {
63
- if (Platform.OS === "android") {
64
+ if (isAndroid()) {
64
65
  AppRegistry.registerHeadlessTask("onPushDismiss", () => onPushDismiss);
65
66
  } else {
66
67
  netmeraRCTEventEmitter.addListener("onPushDismiss", onPushDismiss);
67
68
  }
68
69
  }
69
70
  if (onPushButtonClicked) {
70
- if (Platform.OS === "android") {
71
+ if (isAndroid()) {
71
72
  AppRegistry.registerHeadlessTask(
72
73
  "onPushButtonClicked",
73
74
  () => onPushButtonClicked
@@ -75,7 +76,7 @@ export default class Netmera {
75
76
  }
76
77
  }
77
78
  if (onCarouselObjectSelected) {
78
- if (Platform.OS === "android") {
79
+ if (isAndroid()) {
79
80
  AppRegistry.registerHeadlessTask(
80
81
  "onCarouselObjectSelected",
81
82
  () => onCarouselObjectSelected
@@ -84,6 +85,21 @@ export default class Netmera {
84
85
  }
85
86
  };
86
87
 
88
+ static onWidgetUrlTriggered = (handler: (url: string) => void) => {
89
+ if (isAndroid()) {
90
+ DeviceEventEmitter.addListener("onWidgetUrlTriggered", (eventData) => {
91
+ handler(eventData);
92
+ });
93
+ } else {
94
+ netmeraRCTEventEmitter.addListener(
95
+ "onWidgetUrlTriggered",
96
+ (eventData) => {
97
+ handler(eventData?.url);
98
+ }
99
+ );
100
+ }
101
+ };
102
+
87
103
  static currentExternalId = async (): Promise<string> => {
88
104
  return RNNetmera.currentExternalId();
89
105
  };
@@ -129,7 +145,7 @@ export default class Netmera {
129
145
  };
130
146
 
131
147
  static turnOffSendingEventAndUserUpdate = (turnOff: boolean) => {
132
- if (Platform.OS === "android") {
148
+ if (isAndroid()) {
133
149
  RNNetmera.turnOffSendingEventAndUserUpdate(turnOff);
134
150
  }
135
151
  };
@@ -240,7 +256,7 @@ export default class Netmera {
240
256
  from?: string,
241
257
  data?: { [key: string]: string }
242
258
  ) => {
243
- if (Platform.OS === "android" && data) {
259
+ if (isAndroid() && data) {
244
260
  data["google.c.sender.id"] = from ?? "";
245
261
  RNNetmera.onNetmeraPushMessageReceived(data);
246
262
  }
@@ -250,7 +266,7 @@ export default class Netmera {
250
266
  from?: string,
251
267
  data?: { [key: string]: string }
252
268
  ) => {
253
- if (Platform.OS === "android" && data) {
269
+ if (isAndroid() && data) {
254
270
  data["_nm"] = JSON.stringify(data["_nm"]);
255
271
  data["from"] = from ?? "";
256
272
  RNNetmera.onNetmeraPushMessageReceived(data);
@@ -258,16 +274,12 @@ export default class Netmera {
258
274
  };
259
275
 
260
276
  static onNetmeraNewToken = (pushToken: string) => {
261
- if (Platform.OS === "android") {
277
+ if (isAndroid()) {
262
278
  RNNetmera.onNetmeraNewToken(pushToken);
263
279
  }
264
280
  };
265
281
 
266
282
  static isNetmeraRemoteMessage(data?: { [key: string]: string }): boolean {
267
- return (
268
- Platform.OS === "android" &&
269
- data != undefined &&
270
- data.hasOwnProperty("_nm")
271
- );
283
+ return isAndroid() && data != undefined && data.hasOwnProperty("_nm");
272
284
  }
273
285
  }
@@ -0,0 +1,9 @@
1
+ import { Platform } from "react-native";
2
+
3
+ export const isAndroid = () => {
4
+ return Platform.OS === "android";
5
+ };
6
+
7
+ export const isIos = () => {
8
+ return Platform.OS === "ios";
9
+ };