@onekeyfe/react-native-jpush 0.0.0-stage → 6.7.0-alpha.435

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 (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -2
  3. package/ReactNativeJpush.podspec +66 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +143 -0
  6. package/android/gradle.properties +4 -0
  7. package/android/src/main/AndroidManifest.xml +143 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/cn/android/service/JTransitActivity.java +19 -0
  10. package/android/src/main/java/cn/jiguang/android/BuildConfig.java +10 -0
  11. package/android/src/main/java/cn/jiguang/android/IDataShare.java +190 -0
  12. package/android/src/main/java/cn/jiguang/api/BaseLogger.java +82 -0
  13. package/android/src/main/java/cn/jiguang/api/JAction.java +22 -0
  14. package/android/src/main/java/cn/jiguang/api/JActionExtra.java +21 -0
  15. package/android/src/main/java/cn/jiguang/api/JAnalyticsAction.java +11 -0
  16. package/android/src/main/java/cn/jiguang/api/JCoreInterface.java +228 -0
  17. package/android/src/main/java/cn/jiguang/api/JCoreManager.java +156 -0
  18. package/android/src/main/java/cn/jiguang/api/JDispatchAction.java +66 -0
  19. package/android/src/main/java/cn/jiguang/api/MultiSpHelper.java +114 -0
  20. package/android/src/main/java/cn/jiguang/api/ReportCallBack.java +9 -0
  21. package/android/src/main/java/cn/jiguang/api/SdkType.java +13 -0
  22. package/android/src/main/java/cn/jiguang/api/utils/JCollectionAuth.java +23 -0
  23. package/android/src/main/java/cn/jiguang/core/JCoreCrypto.java +545 -0
  24. package/android/src/main/java/cn/jiguang/core/JCoreStorage.java +737 -0
  25. package/android/src/main/java/cn/jiguang/core/JCoreTcpEngine.java +1394 -0
  26. package/android/src/main/java/cn/jiguang/core/JCoreWireCodec.java +1716 -0
  27. package/android/src/main/java/cn/jiguang/internal/ActionManager.java +63 -0
  28. package/android/src/main/java/cn/jiguang/internal/JConstants.java +61 -0
  29. package/android/src/main/java/cn/jiguang/internal/JCoreHelperAction.java +12 -0
  30. package/android/src/main/java/cn/jiguang/internal/JCoreInternalHelper.java +102 -0
  31. package/android/src/main/java/cn/jiguang/net/DefaultHostVerifier.java +40 -0
  32. package/android/src/main/java/cn/jiguang/net/HttpRequest.java +78 -0
  33. package/android/src/main/java/cn/jiguang/net/HttpResponse.java +48 -0
  34. package/android/src/main/java/cn/jiguang/net/HttpUtils.java +106 -0
  35. package/android/src/main/java/cn/jiguang/plugins/core/JCoreModule.java +91 -0
  36. package/android/src/main/java/cn/jiguang/plugins/core/JCorePackage.java +27 -0
  37. package/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java +773 -0
  38. package/android/src/main/java/cn/jiguang/plugins/push/JPushPackage.java +25 -0
  39. package/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java +88 -0
  40. package/android/src/main/java/cn/jiguang/plugins/push/common/JLogger.java +122 -0
  41. package/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java +710 -0
  42. package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushBroadcastReceiver.java +37 -0
  43. package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java +264 -0
  44. package/android/src/main/java/cn/jiguang/plugins/service/JCoreModuleService.java +7 -0
  45. package/android/src/main/java/cn/jpush/android/api/BasicPushNotificationBuilder.java +83 -0
  46. package/android/src/main/java/cn/jpush/android/api/CallBackParams.java +50 -0
  47. package/android/src/main/java/cn/jpush/android/api/CmdMessage.java +33 -0
  48. package/android/src/main/java/cn/jpush/android/api/CustomMessage.java +28 -0
  49. package/android/src/main/java/cn/jpush/android/api/CustomPushNotificationBuilder.java +81 -0
  50. package/android/src/main/java/cn/jpush/android/api/DefaultPushNotificationBuilder.java +90 -0
  51. package/android/src/main/java/cn/jpush/android/api/InAppSlotParams.java +65 -0
  52. package/android/src/main/java/cn/jpush/android/api/InstrumentedActivity.java +17 -0
  53. package/android/src/main/java/cn/jpush/android/api/InstrumentedListActivity.java +17 -0
  54. package/android/src/main/java/cn/jpush/android/api/JPushInterface.java +488 -0
  55. package/android/src/main/java/cn/jpush/android/api/JPushMessage.java +121 -0
  56. package/android/src/main/java/cn/jpush/android/api/JThirdPlatFormInterface.java +147 -0
  57. package/android/src/main/java/cn/jpush/android/api/MultiActionsNotificationBuilder.java +72 -0
  58. package/android/src/main/java/cn/jpush/android/api/NotificationCustomButton.java +50 -0
  59. package/android/src/main/java/cn/jpush/android/api/NotificationMessage.java +67 -0
  60. package/android/src/main/java/cn/jpush/android/api/PushNotificationBuilder.java +13 -0
  61. package/android/src/main/java/cn/jpush/android/api/TagAliasCallback.java +8 -0
  62. package/android/src/main/java/cn/jpush/android/data/JPushCollectControl.java +96 -0
  63. package/android/src/main/java/cn/jpush/android/data/JPushConfig.java +79 -0
  64. package/android/src/main/java/cn/jpush/android/data/JPushConfigEx.java +41 -0
  65. package/android/src/main/java/cn/jpush/android/data/JPushLocalNotification.java +155 -0
  66. package/android/src/main/java/cn/jpush/android/helper/JCoreHelper.java +70 -0
  67. package/android/src/main/java/cn/jpush/android/helper/Logger.java +82 -0
  68. package/android/src/main/java/cn/jpush/android/local/ActionHelper.java +1198 -0
  69. package/android/src/main/java/cn/jpush/android/local/ActivityLifeCallBack.java +47 -0
  70. package/android/src/main/java/cn/jpush/android/local/JPushAction.java +67 -0
  71. package/android/src/main/java/cn/jpush/android/local/JPushConstants.java +34 -0
  72. package/android/src/main/java/cn/jpush/android/local/JPushResponse.java +26 -0
  73. package/android/src/main/java/cn/jpush/android/local/ProxyActivityAction.java +34 -0
  74. package/android/src/main/java/cn/jpush/android/service/AlarmReceiver.java +15 -0
  75. package/android/src/main/java/cn/jpush/android/service/BActivity.java +19 -0
  76. package/android/src/main/java/cn/jpush/android/service/DActivity.java +19 -0
  77. package/android/src/main/java/cn/jpush/android/service/DaemonService.java +17 -0
  78. package/android/src/main/java/cn/jpush/android/service/DataProvider.java +136 -0
  79. package/android/src/main/java/cn/jpush/android/service/DataShare.java +129 -0
  80. package/android/src/main/java/cn/jpush/android/service/DownloadProvider.java +139 -0
  81. package/android/src/main/java/cn/jpush/android/service/InitProvider.java +48 -0
  82. package/android/src/main/java/cn/jpush/android/service/JCommonService.java +79 -0
  83. package/android/src/main/java/cn/jpush/android/service/JNotifyActivity.java +28 -0
  84. package/android/src/main/java/cn/jpush/android/service/JPushMessageReceiver.java +93 -0
  85. package/android/src/main/java/cn/jpush/android/service/PushReceiver.java +26 -0
  86. package/android/src/main/java/cn/jpush/android/service/PushService.java +28 -0
  87. package/android/src/main/java/cn/jpush/android/service/SchedulerReceiver.java +17 -0
  88. package/android/src/main/java/cn/jpush/android/service/TagAliasReceiver.java +11 -0
  89. package/android/src/main/java/cn/jpush/android/service/WakedResultReceiver.java +24 -0
  90. package/android/src/main/java/cn/jpush/android/ui/FullScreenView.java +11 -0
  91. package/android/src/main/java/cn/jpush/android/ui/PopWinActivity.java +16 -0
  92. package/android/src/main/java/cn/jpush/android/ui/PushActivity.java +27 -0
  93. package/android/src/main/java/cn/jpush/android/ui/RoundedImageView.java +63 -0
  94. package/android/src/main/java/cn/jpush/android/ui/ShadowViewCard.java +56 -0
  95. package/android/src/main/java/cn/jpush/android/ups/ICallbackResult.java +5 -0
  96. package/android/src/main/java/cn/jpush/android/ups/JPushUPSManager.java +37 -0
  97. package/android/src/main/java/cn/jpush/android/ups/TokenResult.java +47 -0
  98. package/android/src/main/java/cn/jpush/android/ups/UPSRegisterCallBack.java +4 -0
  99. package/android/src/main/java/cn/jpush/android/ups/UPSTurnCallBack.java +4 -0
  100. package/android/src/main/java/cn/jpush/android/ups/UPSUnRegisterCallBack.java +4 -0
  101. package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpush.kt +455 -0
  102. package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushPackage.kt +50 -0
  103. package/android/src/main/res/values/jpush_string.xml +7 -0
  104. package/android/src/main/res/values/jpush_style.xml +22 -0
  105. package/android/src/test/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushProtocolTest.java +1016 -0
  106. package/ios/ReactNativeJpush.swift +522 -0
  107. package/ios/bridge/RCTJCoreModule.h +5 -0
  108. package/ios/bridge/RCTJCoreModule.m +31 -0
  109. package/ios/bridge/RCTJPushEventQueue.h +14 -0
  110. package/ios/bridge/RCTJPushEventQueue.m +23 -0
  111. package/ios/bridge/RCTJPushModule.h +37 -0
  112. package/ios/bridge/RCTJPushModule.m +1165 -0
  113. package/ios/include/JCOREService.h +3 -0
  114. package/ios/include/JGCOREAPI.h +14 -0
  115. package/ios/include/JGInforCollectionAuth.h +17 -0
  116. package/ios/include/JGInforCollectionAuthItems.h +2 -0
  117. package/ios/include/JGPushNotificationTrigger.h +2 -0
  118. package/ios/include/JPUSHService.h +359 -0
  119. package/ios/jcore/JCOREConfiguration.h +141 -0
  120. package/ios/jcore/JCOREConfiguration.m +703 -0
  121. package/ios/jcore/JCORECrypto.h +73 -0
  122. package/ios/jcore/JCORECrypto.m +649 -0
  123. package/ios/jcore/JCORESisResolver.h +56 -0
  124. package/ios/jcore/JCORESisResolver.m +525 -0
  125. package/ios/jcore/JCORETcpSession.h +42 -0
  126. package/ios/jcore/JCORETcpSession.m +956 -0
  127. package/ios/jcore/JCOREWireProtocol.h +274 -0
  128. package/ios/jcore/JCOREWireProtocol.m +1453 -0
  129. package/ios/jpush/JPUSHModels.m +214 -0
  130. package/ios/jpush/JPUSHNotificationManager.h +34 -0
  131. package/ios/jpush/JPUSHNotificationManager.m +360 -0
  132. package/ios/jpush/JPUSHService.m +794 -0
  133. package/ios/tests/ReactNativeJpushTests.m +148 -0
  134. package/lib/module/ReactNativeJpush.nitro.js +4 -0
  135. package/lib/module/ReactNativeJpush.nitro.js.map +1 -0
  136. package/lib/module/index.js +801 -0
  137. package/lib/module/index.js.map +1 -0
  138. package/lib/module/package.json +1 -0
  139. package/lib/typescript/package.json +1 -0
  140. package/lib/typescript/src/ReactNativeJpush.nitro.d.ts +60 -0
  141. package/lib/typescript/src/ReactNativeJpush.nitro.d.ts.map +1 -0
  142. package/lib/typescript/src/index.d.ts +235 -0
  143. package/lib/typescript/src/index.d.ts.map +1 -0
  144. package/nitro.json +23 -0
  145. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
  146. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string.hpp +76 -0
  147. package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.cpp +310 -0
  148. package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.hpp +115 -0
  149. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_bool.kt +78 -0
  150. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_std__string_std__string.kt +78 -0
  151. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/HybridReactNativeJpushSpec.kt +274 -0
  152. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/reactnativejpushOnLoad.kt +35 -0
  153. package/nitrogen/generated/android/reactnativejpush+autolinking.cmake +81 -0
  154. package/nitrogen/generated/android/reactnativejpush+autolinking.gradle +27 -0
  155. package/nitrogen/generated/android/reactnativejpushOnLoad.cpp +58 -0
  156. package/nitrogen/generated/android/reactnativejpushOnLoad.hpp +34 -0
  157. package/nitrogen/generated/ios/ReactNativeJpush+autolinking.rb +62 -0
  158. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.cpp +49 -0
  159. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.hpp +147 -0
  160. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Umbrella.hpp +46 -0
  161. package/nitrogen/generated/ios/ReactNativeJpushAutolinking.mm +33 -0
  162. package/nitrogen/generated/ios/ReactNativeJpushAutolinking.swift +26 -0
  163. package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.cpp +11 -0
  164. package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.hpp +402 -0
  165. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  166. package/nitrogen/generated/ios/swift/Func_void_std__string_std__string.swift +46 -0
  167. package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec.swift +107 -0
  168. package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec_cxx.swift +723 -0
  169. package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.cpp +73 -0
  170. package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.hpp +116 -0
  171. package/package.json +173 -4
  172. package/src/ReactNativeJpush.nitro.ts +93 -0
  173. package/src/index.tsx +1090 -0
@@ -0,0 +1,710 @@
1
+ package cn.jiguang.plugins.push.helper;
2
+
3
+ import android.content.Context;
4
+ import android.content.Intent;
5
+ import android.os.Bundle;
6
+
7
+ import com.facebook.react.bridge.Arguments;
8
+ import com.facebook.react.bridge.ReactApplicationContext;
9
+ import com.facebook.react.bridge.ReadableArray;
10
+ import com.facebook.react.bridge.ReadableMap;
11
+ import com.facebook.react.bridge.WritableArray;
12
+ import com.facebook.react.bridge.WritableMap;
13
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
14
+
15
+ import org.json.JSONArray;
16
+ import org.json.JSONObject;
17
+
18
+ import java.util.ArrayList;
19
+ import java.util.HashMap;
20
+ import java.util.Iterator;
21
+ import java.util.LinkedHashSet;
22
+ import java.util.List;
23
+ import java.util.Map;
24
+ import java.util.Set;
25
+ import java.util.concurrent.ConcurrentHashMap;
26
+ import java.util.concurrent.CopyOnWriteArrayList;
27
+ import java.util.concurrent.atomic.AtomicInteger;
28
+
29
+ import cn.jiguang.plugins.push.JPushModule;
30
+ import cn.jiguang.plugins.push.common.JConstants;
31
+ import cn.jiguang.plugins.push.common.JLogger;
32
+ import cn.jpush.android.api.CustomMessage;
33
+ import cn.jpush.android.api.JPushMessage;
34
+ import cn.jpush.android.api.NotificationMessage;
35
+ import cn.jpush.android.api.NotificationCustomButton;
36
+
37
+ public class JPushHelper {
38
+
39
+ public interface NitroEventListener {
40
+ void onEvent(String eventName, String payloadJson);
41
+ }
42
+
43
+ private static final class PendingEvent {
44
+ final String eventName;
45
+ final WritableMap params;
46
+ final Map<String, Object> mapParams;
47
+
48
+ PendingEvent(String eventName, WritableMap params) {
49
+ this.eventName = eventName;
50
+ this.params = params;
51
+ this.mapParams = null;
52
+ }
53
+
54
+ PendingEvent(String eventName, Map<String, Object> mapParams) {
55
+ this.eventName = eventName;
56
+ this.params = null;
57
+ this.mapParams = mapParams != null
58
+ ? new HashMap<String, Object>(mapParams)
59
+ : new HashMap<String, Object>();
60
+ }
61
+ }
62
+
63
+ private static final class PendingNitroEvent {
64
+ final String eventName;
65
+ final String payloadJson;
66
+
67
+ PendingNitroEvent(String eventName, String payloadJson) {
68
+ this.eventName = eventName;
69
+ this.payloadJson = payloadJson;
70
+ }
71
+ }
72
+
73
+ private static final AtomicInteger NEXT_NITRO_LISTENER_ID = new AtomicInteger(1);
74
+ private static final Map<Integer, NitroEventListener> NITRO_LISTENERS =
75
+ new ConcurrentHashMap<Integer, NitroEventListener>();
76
+ private static final List<PendingEvent> PENDING_EVENTS =
77
+ new CopyOnWriteArrayList<PendingEvent>();
78
+ private static final List<PendingNitroEvent> PENDING_NITRO_EVENTS =
79
+ new CopyOnWriteArrayList<PendingNitroEvent>();
80
+
81
+ public static int registerNitroListener(NitroEventListener listener) {
82
+ if (listener == null) {
83
+ return 0;
84
+ }
85
+ int id = NEXT_NITRO_LISTENER_ID.getAndIncrement();
86
+ NITRO_LISTENERS.put(Integer.valueOf(id), listener);
87
+ flushPendingNitroEvents();
88
+ return id;
89
+ }
90
+
91
+ public static void unregisterNitroListener(int id) {
92
+ if (id <= 0) {
93
+ return;
94
+ }
95
+ NITRO_LISTENERS.remove(Integer.valueOf(id));
96
+ }
97
+
98
+ public static void clearNitroListeners() {
99
+ NITRO_LISTENERS.clear();
100
+ PENDING_NITRO_EVENTS.clear();
101
+ PENDING_EVENTS.clear();
102
+ }
103
+
104
+ private static Set<ReactApplicationContext> getTargetContexts() {
105
+ Set<ReactApplicationContext> targets = new LinkedHashSet<ReactApplicationContext>();
106
+ Set<ReactApplicationContext> activeContexts = JPushModule.getActiveReactContexts();
107
+ if (activeContexts != null) {
108
+ for (ReactApplicationContext ctx : activeContexts) {
109
+ if (ctx != null) {
110
+ targets.add(ctx);
111
+ }
112
+ }
113
+ }
114
+ if (JPushModule.reactContext != null) {
115
+ targets.add(JPushModule.reactContext);
116
+ }
117
+ return targets;
118
+ }
119
+
120
+ private static boolean isEmpty(CharSequence s) {
121
+ return s == null || s.length() == 0;
122
+ }
123
+
124
+ public static void flushPendingNitroEvents() {
125
+ if (PENDING_NITRO_EVENTS.isEmpty() || NITRO_LISTENERS.isEmpty()) {
126
+ return;
127
+ }
128
+ List<PendingNitroEvent> snapshot = new ArrayList<PendingNitroEvent>(PENDING_NITRO_EVENTS);
129
+ PENDING_NITRO_EVENTS.clear();
130
+ for (PendingNitroEvent pending : snapshot) {
131
+ if (pending == null || isEmpty(pending.eventName)) {
132
+ continue;
133
+ }
134
+ for (NitroEventListener listener : NITRO_LISTENERS.values()) {
135
+ if (listener != null) {
136
+ try {
137
+ listener.onEvent(pending.eventName, pending.payloadJson);
138
+ } catch (Throwable inner) {
139
+ JLogger.e("flushPendingNitroEvents error:" + inner.getMessage());
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ public static void flushPendingEvents() {
147
+ flushPendingNitroEvents();
148
+ if (PENDING_EVENTS.isEmpty()) {
149
+ return;
150
+ }
151
+ Set<ReactApplicationContext> targets = getTargetContexts();
152
+ if (targets.isEmpty()) {
153
+ return;
154
+ }
155
+ List<PendingEvent> snapshot = new ArrayList<PendingEvent>(PENDING_EVENTS);
156
+ PENDING_EVENTS.clear();
157
+ for (PendingEvent pending : snapshot) {
158
+ if (pending != null && !isEmpty(pending.eventName)) {
159
+ int index = 0;
160
+ int total = targets.size();
161
+ WritableMap baseWritable = pending.params;
162
+ if (baseWritable == null && pending.mapParams != null) {
163
+ try {
164
+ baseWritable = mapFromHashMap(pending.mapParams);
165
+ } catch (Throwable ignored) {
166
+ }
167
+ }
168
+ for (ReactApplicationContext ctx : targets) {
169
+ try {
170
+ WritableMap payload = (total > 1 && index > 0)
171
+ ? cloneWritableMap(baseWritable)
172
+ : baseWritable;
173
+ index++;
174
+ ctx.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
175
+ .emit(pending.eventName, payload);
176
+ } catch (Throwable inner) {
177
+ JLogger.e("flushPendingEvents error:" + inner.getMessage());
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+
184
+ public static void sendEventMap(String eventName, Map<String, Object> params) {
185
+ if (isEmpty(eventName)) {
186
+ return;
187
+ }
188
+ try {
189
+ String payloadJson = mapToJsonString(params);
190
+ if (!NITRO_LISTENERS.isEmpty()) {
191
+ for (NitroEventListener listener : NITRO_LISTENERS.values()) {
192
+ if (listener != null) {
193
+ try {
194
+ listener.onEvent(eventName, payloadJson);
195
+ } catch (Throwable inner) {
196
+ JLogger.e("sendEventMap nitro listener error:" + inner.getMessage());
197
+ }
198
+ }
199
+ }
200
+ } else {
201
+ if (PENDING_NITRO_EVENTS.size() >= 64) {
202
+ PENDING_NITRO_EVENTS.remove(0);
203
+ }
204
+ PENDING_NITRO_EVENTS.add(new PendingNitroEvent(eventName, payloadJson));
205
+ }
206
+
207
+ Set<ReactApplicationContext> targets = getTargetContexts();
208
+ boolean deliveredLegacy = false;
209
+ if (!targets.isEmpty()) {
210
+ try {
211
+ WritableMap writable = mapFromHashMap(
212
+ params != null ? params : new HashMap<String, Object>()
213
+ );
214
+ int index = 0;
215
+ int total = targets.size();
216
+ for (ReactApplicationContext ctx : targets) {
217
+ WritableMap payload = (total > 1 && index > 0) ? cloneWritableMap(writable) : writable;
218
+ index++;
219
+ ctx.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, payload);
220
+ deliveredLegacy = true;
221
+ }
222
+ } catch (Throwable ignored) {
223
+ }
224
+ }
225
+ if (!deliveredLegacy) {
226
+ if (PENDING_EVENTS.size() >= 64) {
227
+ PENDING_EVENTS.remove(0);
228
+ }
229
+ PENDING_EVENTS.add(new PendingEvent(eventName, params));
230
+ }
231
+ } catch (Throwable throwable) {
232
+ JLogger.e("sendEventMap error:" + throwable.getMessage());
233
+ }
234
+ }
235
+
236
+ private static String mapToJsonString(Map<String, Object> params) {
237
+ JSONObject obj = new JSONObject();
238
+ if (params == null || params.isEmpty()) {
239
+ return obj.toString();
240
+ }
241
+ for (Map.Entry<String, Object> entry : params.entrySet()) {
242
+ if (entry.getKey() != null) {
243
+ try {
244
+ obj.put(entry.getKey(), convertValueForJson(entry.getValue()));
245
+ } catch (Throwable ignored) {
246
+ }
247
+ }
248
+ }
249
+ return obj.toString();
250
+ }
251
+
252
+ public static void sendEvent(String eventName, WritableMap params) {
253
+ if (isEmpty(eventName)) {
254
+ return;
255
+ }
256
+ try {
257
+ String payloadJson = readableMapToJsonObject(params).toString();
258
+ if (!NITRO_LISTENERS.isEmpty()) {
259
+ for (NitroEventListener listener : NITRO_LISTENERS.values()) {
260
+ if (listener != null) {
261
+ try {
262
+ listener.onEvent(eventName, payloadJson);
263
+ } catch (Throwable inner) {
264
+ JLogger.e("sendEvent nitro listener error:" + inner.getMessage());
265
+ }
266
+ }
267
+ }
268
+ } else {
269
+ if (PENDING_NITRO_EVENTS.size() >= 64) {
270
+ PENDING_NITRO_EVENTS.remove(0);
271
+ }
272
+ PENDING_NITRO_EVENTS.add(new PendingNitroEvent(eventName, payloadJson));
273
+ }
274
+
275
+ Set<ReactApplicationContext> targets = getTargetContexts();
276
+ boolean deliveredLegacy = false;
277
+ int index = 0;
278
+ int total = targets.size();
279
+ for (ReactApplicationContext ctx : targets) {
280
+ try {
281
+ WritableMap payload = (total > 1 && index > 0) ? cloneWritableMap(params) : params;
282
+ index++;
283
+ ctx.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, payload);
284
+ deliveredLegacy = true;
285
+ } catch (Throwable inner) {
286
+ JLogger.e("sendEvent error:" + inner.getMessage());
287
+ }
288
+ }
289
+
290
+ if (!deliveredLegacy) {
291
+ if (PENDING_EVENTS.size() >= 64) {
292
+ PENDING_EVENTS.remove(0);
293
+ }
294
+ PENDING_EVENTS.add(new PendingEvent(eventName, cloneWritableMap(params)));
295
+ }
296
+ } catch (Throwable throwable) {
297
+ JLogger.e("sendEvent error:" + throwable.getMessage());
298
+ }
299
+ }
300
+
301
+ public static JSONObject readableMapToJsonObject(ReadableMap source) {
302
+ JSONObject result = new JSONObject();
303
+ if (source == null) {
304
+ return result;
305
+ }
306
+ try {
307
+ HashMap<String, Object> raw = source.toHashMap();
308
+ if (raw != null) {
309
+ for (Map.Entry<String, Object> entry : raw.entrySet()) {
310
+ String key = entry.getKey();
311
+ if (key == null) {
312
+ continue;
313
+ }
314
+ result.put(key, convertValueForJson(entry.getValue()));
315
+ }
316
+ }
317
+ } catch (Throwable ignored) {
318
+ }
319
+ return result;
320
+ }
321
+
322
+ public static JSONArray readableArrayToJsonArray(ReadableArray source) {
323
+ JSONArray arr = new JSONArray();
324
+ if (source == null) {
325
+ return arr;
326
+ }
327
+ try {
328
+ for (int i = 0; i < source.size(); i++) {
329
+ arr.put(source.getString(i));
330
+ }
331
+ } catch (Throwable ignored) {
332
+ }
333
+ return arr;
334
+ }
335
+
336
+ private static boolean isJsonNull(Object val) {
337
+ return val == null || val == JSONObject.NULL || (JSONObject.NULL != null && JSONObject.NULL.equals(val));
338
+ }
339
+
340
+ private static Object convertValueForJson(Object val) {
341
+ if (isJsonNull(val)) {
342
+ return JSONObject.NULL != null ? JSONObject.NULL : null;
343
+ }
344
+ if (val instanceof String || val instanceof Boolean || val instanceof Number
345
+ || val instanceof JSONObject || val instanceof JSONArray) {
346
+ return val;
347
+ }
348
+ if (val instanceof ReadableMap) {
349
+ return readableMapToJsonObject((ReadableMap) val);
350
+ }
351
+ if (val instanceof Map) {
352
+ JSONObject obj = new JSONObject();
353
+ for (Map.Entry<?, ?> entry : ((Map<?, ?>) val).entrySet()) {
354
+ if (entry.getKey() != null) {
355
+ try {
356
+ obj.put(String.valueOf(entry.getKey()), convertValueForJson(entry.getValue()));
357
+ } catch (Throwable ignored) {
358
+ }
359
+ }
360
+ }
361
+ return obj;
362
+ }
363
+ if (val instanceof ReadableArray) {
364
+ return readableArrayToJsonArray((ReadableArray) val);
365
+ }
366
+ if (val instanceof List) {
367
+ JSONArray arr = new JSONArray();
368
+ for (Object item : (List<?>) val) {
369
+ arr.put(convertValueForJson(item));
370
+ }
371
+ return arr;
372
+ }
373
+ return String.valueOf(val);
374
+ }
375
+
376
+ @SuppressWarnings("unchecked")
377
+ private static WritableMap cloneWritableMap(ReadableMap source) {
378
+ if (source == null) {
379
+ return null;
380
+ }
381
+ try {
382
+ HashMap<String, Object> raw = source.toHashMap();
383
+ if (raw == null) {
384
+ return (source instanceof WritableMap) ? (WritableMap) source : Arguments.createMap();
385
+ }
386
+ return mapFromHashMap(raw);
387
+ } catch (Throwable ignored) {
388
+ return (source instanceof WritableMap) ? (WritableMap) source : null;
389
+ }
390
+ }
391
+
392
+ @SuppressWarnings("unchecked")
393
+ private static WritableMap mapFromHashMap(Map<String, Object> raw) {
394
+ WritableMap copy = Arguments.createMap();
395
+ for (Map.Entry<String, Object> entry : raw.entrySet()) {
396
+ String key = entry.getKey();
397
+ Object val = entry.getValue();
398
+ if (key == null || val == null) {
399
+ continue;
400
+ }
401
+ if (val instanceof String) {
402
+ copy.putString(key, (String) val);
403
+ } else if (val instanceof Boolean) {
404
+ copy.putBoolean(key, ((Boolean) val).booleanValue());
405
+ } else if (val instanceof Number) {
406
+ copy.putInt(key, ((Number) val).intValue());
407
+ } else if (val instanceof ReadableMap) {
408
+ copy.putMap(key, cloneWritableMap((ReadableMap) val));
409
+ } else if (val instanceof Map) {
410
+ copy.putMap(key, mapFromHashMap((Map<String, Object>) val));
411
+ } else if (val instanceof ReadableArray) {
412
+ ReadableArray arr = (ReadableArray) val;
413
+ WritableArray arrCopy = Arguments.createArray();
414
+ for (int i = 0; i < arr.size(); i++) {
415
+ arrCopy.pushString(arr.getString(i));
416
+ }
417
+ copy.putArray(key, arrCopy);
418
+ } else if (val instanceof List) {
419
+ List<?> list = (List<?>) val;
420
+ WritableArray arrCopy = Arguments.createArray();
421
+ for (Object item : list) {
422
+ if (item != null) {
423
+ arrCopy.pushString(String.valueOf(item));
424
+ }
425
+ }
426
+ copy.putArray(key, arrCopy);
427
+ } else {
428
+ copy.putString(key, String.valueOf(val));
429
+ }
430
+ }
431
+ return copy;
432
+ }
433
+
434
+ public static Map<String, Object> convertNotificationToMapObject(String eventType, NotificationMessage message) {
435
+ Map<String, Object> map = new HashMap<String, Object>();
436
+ map.put(JConstants.NOTIFICATION_EVENT_TYPE, eventType != null ? eventType : "");
437
+ if (message != null) {
438
+ map.put(JConstants.MESSAGE_ID, message.msgId != null ? message.msgId : "");
439
+ map.put(JConstants.TITLE, message.notificationTitle != null ? message.notificationTitle : "");
440
+ map.put(JConstants.CONTENT, message.notificationContent != null ? message.notificationContent : "");
441
+ convertExtrasToMap(message.notificationExtras, map);
442
+ }
443
+ return map;
444
+ }
445
+
446
+ public static Map<String, Object> convertInAppMessageToMapObject(String eventType, NotificationMessage message) {
447
+ Map<String, Object> map = new HashMap<String, Object>();
448
+ map.put(JConstants.INAPP_MESSAGE_EVENT, eventType != null ? eventType : "");
449
+ if (message != null) {
450
+ map.put(JConstants.MESSAGE_ID, message.msgId != null ? message.msgId : "");
451
+ map.put(JConstants.TITLE, message.inAppMsgTitle != null ? message.inAppMsgTitle : "");
452
+ map.put(JConstants.CONTENT, message.inAppMsgContentBody != null ? message.inAppMsgContentBody : "");
453
+ map.put(JConstants.INAPPCLICKACTION, message.inAppClickAction != null ? message.inAppClickAction : "");
454
+ map.put(JConstants.INAPPEXTRAS, message.inAppExtras != null ? message.inAppExtras : "");
455
+ map.put(JConstants.INAPPSHOWTARGET, message.inAppShowTarget != null ? message.inAppShowTarget : "");
456
+ }
457
+ return map;
458
+ }
459
+
460
+ public static Map<String, Object> convertNotificationBundleToMapObject(String eventType, Bundle bundle) {
461
+ Map<String, Object> map = new HashMap<String, Object>();
462
+ map.put(JConstants.NOTIFICATION_EVENT_TYPE, eventType != null ? eventType : "");
463
+ if (bundle != null) {
464
+ map.put(JConstants.MESSAGE_ID, bundle.getString("cn.jpush.android.MSG_ID", ""));
465
+ map.put(JConstants.TITLE, bundle.getString("cn.jpush.android.NOTIFICATION_CONTENT_TITLE", ""));
466
+ map.put(JConstants.CONTENT, bundle.getString("cn.jpush.android.ALERT", ""));
467
+ convertExtrasToMap(bundle.getString("cn.jpush.android.EXTRA", ""), map);
468
+ }
469
+ return map;
470
+ }
471
+
472
+ public static Map<String, Object> convertCustomMessageToMapObject(CustomMessage customMessage) {
473
+ Map<String, Object> map = new HashMap<String, Object>();
474
+ if (customMessage != null) {
475
+ map.put(JConstants.MESSAGE_ID, customMessage.messageId != null ? customMessage.messageId : "");
476
+ map.put(JConstants.TITLE, customMessage.title != null ? customMessage.title : "");
477
+ map.put(JConstants.CONTENT, customMessage.message != null ? customMessage.message : "");
478
+ convertExtrasToMap(customMessage.extra, map);
479
+ }
480
+ return map;
481
+ }
482
+
483
+ public static Map<String, Object> convertNotificationCustomButtonToMapObject(
484
+ NotificationCustomButton notificationCustomButton
485
+ ) {
486
+ Map<String, Object> map = new HashMap<String, Object>();
487
+ if (notificationCustomButton != null) {
488
+ map.put("msgId", notificationCustomButton.a != null ? notificationCustomButton.a : "");
489
+ map.put("platform", Integer.valueOf(notificationCustomButton.b));
490
+ map.put("name", notificationCustomButton.c != null ? notificationCustomButton.c : "");
491
+ map.put("actionType", Integer.valueOf(notificationCustomButton.d));
492
+ map.put("action", notificationCustomButton.e != null ? notificationCustomButton.e : "");
493
+ map.put("data", notificationCustomButton.f != null ? notificationCustomButton.f : "");
494
+ }
495
+ return map;
496
+ }
497
+
498
+ public static Map<String, Object> convertJPushMessageToMapObject(int type, JPushMessage message) {
499
+ Map<String, Object> map = new HashMap<String, Object>();
500
+ if (message == null) {
501
+ return map;
502
+ }
503
+ map.put(JConstants.CODE, Integer.valueOf(message.getErrorCode()));
504
+ map.put(JConstants.SEQUENCE, Integer.valueOf(message.getSequence()));
505
+ switch (type) {
506
+ case 1:
507
+ Set<String> tags = message.getTags();
508
+ List<String> tagsList = new ArrayList<String>();
509
+ if (tags == null || tags.isEmpty()) {
510
+ JLogger.d("tags is empty");
511
+ } else {
512
+ for (String tag : tags) {
513
+ if (tag != null) {
514
+ tagsList.add(tag);
515
+ }
516
+ }
517
+ }
518
+ map.put(JConstants.TAGS, tagsList);
519
+ break;
520
+ case 2:
521
+ map.put(JConstants.TAG_ENABLE, Boolean.valueOf(message.getTagCheckStateResult()));
522
+ map.put(JConstants.TAG, message.getCheckTag() != null ? message.getCheckTag() : "");
523
+ break;
524
+ case 3:
525
+ map.put(JConstants.ALIAS, message.getAlias() != null ? message.getAlias() : "");
526
+ break;
527
+ case 4:
528
+ Map<String, Object> prosMap = new HashMap<String, Object>();
529
+ if (message.getPros() != null) {
530
+ for (Map.Entry<String, Object> entry : message.getPros().entrySet()) {
531
+ if (entry.getKey() != null && entry.getValue() != null) {
532
+ prosMap.put(entry.getKey(), String.valueOf(entry.getValue()));
533
+ }
534
+ }
535
+ }
536
+ map.put(JConstants.PROPERTIES, prosMap);
537
+ break;
538
+ }
539
+ return map;
540
+ }
541
+
542
+ public static void convertExtrasToMap(String extras, Map<String, Object> targetMap) {
543
+ if (targetMap == null || isEmpty(extras) || "{}".equals(extras)) {
544
+ return;
545
+ }
546
+ try {
547
+ Map<String, Object> extrasMap = new HashMap<String, Object>();
548
+ JSONObject jsonObject = new JSONObject(extras);
549
+ Iterator<String> it = jsonObject.keys();
550
+ while (it.hasNext()) {
551
+ String key = it.next();
552
+ if (key == null) {
553
+ continue;
554
+ }
555
+ Object val = jsonObject.opt(key);
556
+ String value = !isJsonNull(val) ? String.valueOf(val) : "";
557
+ extrasMap.put(key, value);
558
+ }
559
+ targetMap.put(JConstants.EXTRAS, extrasMap);
560
+ } catch (Throwable throwable) {
561
+ JLogger.w("convertExtrasToMap error");
562
+ }
563
+ }
564
+
565
+ public static WritableMap convertNotificationToMap(String eventType, NotificationMessage message) {
566
+ WritableMap writableMap = Arguments.createMap();
567
+ writableMap.putString(JConstants.NOTIFICATION_EVENT_TYPE, eventType);
568
+ if (message != null) {
569
+ writableMap.putString(JConstants.MESSAGE_ID, message.msgId);
570
+ writableMap.putString(JConstants.TITLE, message.notificationTitle);
571
+ writableMap.putString(JConstants.CONTENT, message.notificationContent);
572
+ convertExtras(message.notificationExtras, writableMap);
573
+ }
574
+ return writableMap;
575
+ }
576
+ public static WritableMap convertInAppMessageToMap(String eventType, NotificationMessage message) {
577
+ WritableMap writableMap = Arguments.createMap();
578
+ writableMap.putString(JConstants.INAPP_MESSAGE_EVENT, eventType);
579
+ if (message != null) {
580
+ writableMap.putString(JConstants.MESSAGE_ID, message.msgId);
581
+ writableMap.putString(JConstants.TITLE, message.inAppMsgTitle);
582
+ writableMap.putString(JConstants.CONTENT, message.inAppMsgContentBody);
583
+ writableMap.putString(JConstants.INAPPCLICKACTION, message.inAppClickAction);
584
+ writableMap.putString(JConstants.INAPPEXTRAS, message.inAppExtras);
585
+ writableMap.putString(JConstants.INAPPSHOWTARGET, message.inAppShowTarget);
586
+ }
587
+ return writableMap;
588
+ }
589
+
590
+ public static WritableMap convertNotificationBundleToMap(String eventType, Bundle bundle) {
591
+ WritableMap writableMap = Arguments.createMap();
592
+ writableMap.putString(JConstants.NOTIFICATION_EVENT_TYPE, eventType);
593
+ if (bundle != null) {
594
+ writableMap.putString(JConstants.MESSAGE_ID, bundle.getString("cn.jpush.android.MSG_ID",""));
595
+ writableMap.putString(JConstants.TITLE, bundle.getString("cn.jpush.android.NOTIFICATION_CONTENT_TITLE",""));
596
+ writableMap.putString(JConstants.CONTENT, bundle.getString("cn.jpush.android.ALERT",""));
597
+ convertExtras(bundle.getString("cn.jpush.android.EXTRA",""), writableMap);
598
+ }
599
+ return writableMap;
600
+ }
601
+
602
+ public static WritableMap convertCustomMessage(CustomMessage customMessage) {
603
+ WritableMap writableMap = Arguments.createMap();
604
+ if (customMessage != null) {
605
+ writableMap.putString(JConstants.MESSAGE_ID, customMessage.messageId);
606
+ writableMap.putString(JConstants.TITLE, customMessage.title);
607
+ writableMap.putString(JConstants.CONTENT, customMessage.message);
608
+ convertExtras(customMessage.extra, writableMap);
609
+ }
610
+ return writableMap;
611
+ }
612
+
613
+ public static WritableMap convertNotificationCustomButtonToMap(NotificationCustomButton notificationCustomButton) {
614
+ WritableMap writableMap = Arguments.createMap();
615
+ try {
616
+ if (notificationCustomButton != null) {
617
+ writableMap.putString("msgId", notificationCustomButton.a);
618
+ writableMap.putInt("platform", notificationCustomButton.b);
619
+ writableMap.putString("name", notificationCustomButton.c);
620
+ writableMap.putInt("actionType", notificationCustomButton.d);
621
+ writableMap.putString("action", notificationCustomButton.e);
622
+ writableMap.putString("data", notificationCustomButton.f);
623
+ }
624
+ return writableMap;
625
+ } catch (Throwable throwable) {
626
+ JLogger.w("convertNotificationCustomButtonToMap error");
627
+ return writableMap;
628
+ }
629
+ }
630
+
631
+ public static WritableMap convertJPushMessageToMap(int type, JPushMessage message) {
632
+ WritableMap writableMap = Arguments.createMap();
633
+ if (message == null) {
634
+ return writableMap;
635
+ }
636
+ writableMap.putInt(JConstants.CODE, message.getErrorCode());
637
+ writableMap.putInt(JConstants.SEQUENCE, message.getSequence());
638
+ switch (type) {
639
+ case 1:
640
+ Set<String> tags = message.getTags();
641
+ WritableArray tagsArray = Arguments.createArray();
642
+ if(tags==null || tags.isEmpty()){
643
+ JLogger.d("tags is empty");
644
+ }else {
645
+ for (String tag : tags) {
646
+ tagsArray.pushString(tag);
647
+ }
648
+ }
649
+ writableMap.putArray(JConstants.TAGS, tagsArray);
650
+ break;
651
+ case 2:
652
+ writableMap.putBoolean(JConstants.TAG_ENABLE, message.getTagCheckStateResult());
653
+ writableMap.putString(JConstants.TAG, message.getCheckTag());
654
+ break;
655
+ case 3:
656
+ writableMap.putString(JConstants.ALIAS, message.getAlias());
657
+ break;
658
+ case 4:
659
+ WritableMap prosMap = Arguments.createMap();
660
+ if (message.getPros() != null) {
661
+ for (java.util.Map.Entry<String, Object> entry : message.getPros().entrySet()) {
662
+ if (entry.getKey() != null && entry.getValue() != null) {
663
+ prosMap.putString(entry.getKey(), String.valueOf(entry.getValue()));
664
+ }
665
+ }
666
+ }
667
+ writableMap.putMap(JConstants.PROPERTIES, prosMap);
668
+ break;
669
+ }
670
+ return writableMap;
671
+ }
672
+
673
+ public static void convertExtras(String extras, WritableMap writableMap) {
674
+ if (isEmpty(extras) || extras.equals("{}")) return;
675
+ try {
676
+ WritableMap extrasMap = Arguments.createMap();
677
+ JSONObject jsonObject = new JSONObject(extras);
678
+ Iterator<String> it = jsonObject.keys();
679
+ while (it.hasNext()) {
680
+ String key = it.next();
681
+ if (key == null) {
682
+ continue;
683
+ }
684
+ Object val = jsonObject.opt(key);
685
+ String value = !isJsonNull(val) ? String.valueOf(val) : "";
686
+ extrasMap.putString(key, value);
687
+ }
688
+ writableMap.putMap(JConstants.EXTRAS, extrasMap);
689
+ } catch (Throwable throwable) {
690
+ JLogger.w("convertExtras error");
691
+ }
692
+ }
693
+
694
+ public static void launchApp(Context context) {
695
+ if (context == null) {
696
+ return;
697
+ }
698
+ try {
699
+ Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
700
+ if (intent == null) {
701
+ return;
702
+ }
703
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
704
+ context.startActivity(intent);
705
+ }catch (Throwable throwable){
706
+ JLogger.e("");
707
+ }
708
+ }
709
+
710
+ }