react-native-nfc-manager 4.0.0-beta.0 → 4.0.0-beta.10

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 (106) hide show
  1. package/README.md +146 -49
  2. package/android/src/main/java/community/revteltech/nfc/MifareClassicHandler.java +419 -0
  3. package/android/src/main/java/community/revteltech/nfc/MifareUltralightHandler.java +84 -0
  4. package/android/src/main/java/community/revteltech/nfc/NdefHandler.java +373 -0
  5. package/android/src/main/java/community/revteltech/nfc/NfcAdapterStateChangedReceiver.java +48 -0
  6. package/android/src/main/java/community/revteltech/nfc/NfcErrorCodes.java +16 -0
  7. package/android/src/main/java/community/revteltech/nfc/NfcManager.java +348 -1087
  8. package/android/src/main/java/community/revteltech/nfc/NfcManagerIOSStubBase.java +130 -0
  9. package/android/src/main/java/community/revteltech/nfc/NfcTechIoRouter.java +258 -0
  10. package/android/src/main/java/community/revteltech/nfc/TagTechnologyRequest.java +19 -7
  11. package/android/src/main/java/community/revteltech/nfc/Util.java +275 -2
  12. package/app.plugin.js +8 -9
  13. package/dist/ndef-lib/constants.js +67 -0
  14. package/dist/ndef-lib/constants.js.map +1 -0
  15. package/dist/ndef-lib/index.js +79 -0
  16. package/dist/ndef-lib/index.js.map +1 -0
  17. package/dist/ndef-lib/ndef-text.js +29 -0
  18. package/dist/ndef-lib/ndef-text.js.map +1 -0
  19. package/dist/ndef-lib/ndef-uri.js +40 -0
  20. package/dist/ndef-lib/ndef-uri.js.map +1 -0
  21. package/dist/ndef-lib/ndef-wifi-simple.js +100 -0
  22. package/dist/ndef-lib/ndef-wifi-simple.js.map +1 -0
  23. package/dist/ndef-lib/ndef.js +152 -0
  24. package/dist/ndef-lib/ndef.js.map +1 -0
  25. package/dist/ndef-lib/stringifier.js +155 -0
  26. package/dist/ndef-lib/stringifier.js.map +1 -0
  27. package/dist/ndef-lib/util.js +126 -0
  28. package/dist/ndef-lib/util.js.map +1 -0
  29. package/dist/specs/NativeNfcManager.js +5 -0
  30. package/dist/specs/NativeNfcManager.js.map +1 -0
  31. package/dist/src/NativeNfcManager.js +55 -0
  32. package/dist/src/NativeNfcManager.js.map +1 -0
  33. package/dist/src/NfcError.js +220 -0
  34. package/dist/src/NfcError.js.map +1 -0
  35. package/dist/src/NfcManager.js +175 -0
  36. package/dist/src/NfcManager.js.map +1 -0
  37. package/dist/src/NfcManagerAndroid.js +112 -0
  38. package/dist/src/NfcManagerAndroid.js.map +1 -0
  39. package/dist/src/NfcManagerIOS.js +119 -0
  40. package/dist/src/NfcManagerIOS.js.map +1 -0
  41. package/dist/src/NfcTech/Iso15693HandlerIOS.js +99 -0
  42. package/dist/src/NfcTech/Iso15693HandlerIOS.js.map +1 -0
  43. package/dist/src/NfcTech/IsoDepHandler.js +29 -0
  44. package/dist/src/NfcTech/IsoDepHandler.js.map +1 -0
  45. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js +68 -0
  46. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js.map +1 -0
  47. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js +23 -0
  48. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js.map +1 -0
  49. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js +16 -0
  50. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js.map +1 -0
  51. package/dist/src/NfcTech/NdefHandler.js +54 -0
  52. package/dist/src/NfcTech/NdefHandler.js.map +1 -0
  53. package/dist/src/NfcTech/NfcAHandler.js +16 -0
  54. package/dist/src/NfcTech/NfcAHandler.js.map +1 -0
  55. package/dist/src/NfcTech/NfcVHandler.js +33 -0
  56. package/dist/src/NfcTech/NfcVHandler.js.map +1 -0
  57. package/dist/src/index.js +53 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/index.d.ts +110 -46
  60. package/ios/NfcManager.h +2 -11
  61. package/ios/NfcManager.mm +264 -438
  62. package/ios/RNNfcBridgeUtil.h +28 -0
  63. package/ios/RNNfcBridgeUtil.mm +52 -0
  64. package/ios/RNNfcManager+Felica.swift +61 -0
  65. package/ios/RNNfcManager+Iso15693.swift +895 -0
  66. package/ios/RNNfcManager+IsoDep.swift +145 -0
  67. package/ios/RNNfcManager+Mifare.swift +61 -0
  68. package/ios/RNNfcManager+Ndef.swift +120 -0
  69. package/ios/RNNfcManager.h +251 -0
  70. package/ios/RNNfcManager.swift +648 -0
  71. package/ios/RNNfcSessionDelegateProxy.swift +104 -0
  72. package/ios/RNNfcSwiftUtil.swift +34 -0
  73. package/ndef-lib/{constants.js → constants.ts} +2 -0
  74. package/ndef-lib/{index.js → index.ts} +23 -12
  75. package/ndef-lib/{ndef-text.js → ndef-text.ts} +7 -2
  76. package/ndef-lib/{ndef-uri.js → ndef-uri.ts} +8 -3
  77. package/ndef-lib/{ndef-wifi-simple.js → ndef-wifi-simple.ts} +34 -11
  78. package/ndef-lib/{ndef.js → ndef.ts} +53 -25
  79. package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
  80. package/ndef-lib/{util.js → util.ts} +13 -8
  81. package/package.json +44 -13
  82. package/react-native-nfc-manager.podspec +3 -2
  83. package/specs/NativeNfcManager.ts +95 -0
  84. package/src/NativeNfcManager.ts +84 -0
  85. package/src/{NfcError.js → NfcError.ts} +6 -17
  86. package/src/{NfcManager.js → NfcManager.ts} +51 -34
  87. package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +27 -8
  88. package/src/{NfcManagerIOS.js → NfcManagerIOS.ts} +31 -10
  89. package/src/NfcTech/{Iso15693HandlerIOS.js → Iso15693HandlerIOS.ts} +64 -36
  90. package/src/NfcTech/{IsoDepHandler.js → IsoDepHandler.ts} +8 -5
  91. package/src/NfcTech/{MifareClassicHandlerAndroid.js → MifareClassicHandlerAndroid.ts} +33 -24
  92. package/src/NfcTech/{MifareUltralightHandlerAndroid.js → MifareUltralightHandlerAndroid.ts} +14 -5
  93. package/src/NfcTech/{NdefFormatableHandlerAndroid.js → NdefFormatableHandlerAndroid.ts} +9 -2
  94. package/src/NfcTech/{NdefHandler.js → NdefHandler.ts} +19 -6
  95. package/src/NfcTech/{NfcAHandler.js → NfcAHandler.ts} +6 -3
  96. package/src/NfcTech/{NfcVHandler.js → NfcVHandler.ts} +8 -5
  97. package/src/__mocks__/{NativeNfcManager.js → NativeNfcManager.ts} +4 -1
  98. package/src/{index.js → index.ts} +1 -1
  99. package/android/src/main/java/community/revteltech/nfc/JsonConvert.java +0 -141
  100. package/android/src/main/java/community/revteltech/nfc/MifareUtil.java +0 -84
  101. package/ios/NfcManager+Felica.mm +0 -43
  102. package/ios/NfcManager+Iso15693.mm +0 -600
  103. package/ios/NfcManager+IsoDep.mm +0 -83
  104. package/ios/NfcManager+Mifare.mm +0 -43
  105. package/ios/Util.mm +0 -55
  106. package/src/NativeNfcManager.js +0 -37
@@ -0,0 +1,130 @@
1
+ package community.revteltech.nfc;
2
+
3
+ import com.facebook.react.bridge.Callback;
4
+ import com.facebook.react.bridge.ReadableArray;
5
+ import com.facebook.react.bridge.ReadableMap;
6
+ import com.facebook.react.bridge.ReactApplicationContext;
7
+
8
+ /**
9
+ * Temporary Android-side holder for iOS-only API stubs required by the shared RN spec.
10
+ *
11
+ * TODO: Remove this class after splitting platform specs so Android no longer needs iOS methods.
12
+ */
13
+ @Deprecated
14
+ abstract class NfcManagerIOSStubBase extends NativeNfcManagerSpec {
15
+ NfcManagerIOSStubBase(ReactApplicationContext reactContext) {
16
+ super(reactContext);
17
+ }
18
+
19
+ @Override
20
+ public void setAlertMessage(String message, Callback callback) {
21
+ }
22
+
23
+ @Override
24
+ public void isSessionAvailable(Callback callback) {
25
+ }
26
+
27
+ @Override
28
+ public void isTagSessionAvailable(Callback callback) {
29
+ }
30
+
31
+ @Override
32
+ public void sendMifareCommand(ReadableArray bytes, Callback callback) {
33
+ }
34
+
35
+ @Override
36
+ public void sendCommandAPDU(ReadableMap payload, Callback callback) {
37
+ }
38
+
39
+ @Override
40
+ public void sendCommandAPDUBytes(ReadableArray bytes, Callback callback) {
41
+ }
42
+
43
+ @Override
44
+ public void sendFelicaCommand(ReadableArray bytes, Callback callback) {
45
+ }
46
+
47
+ @Override
48
+ public void restartTechnologyRequest(Callback callback) {
49
+ }
50
+
51
+ @Override
52
+ public void invalidateSession(Callback callback) {
53
+ }
54
+
55
+ @Override
56
+ public void invalidateSessionWithError(String message, Callback callback) {
57
+ }
58
+
59
+ @Override
60
+ public void iso15693_getSystemInfo(double requestFlag, Callback callback) {
61
+ }
62
+
63
+ @Override
64
+ public void iso15693_readSingleBlock(ReadableMap options, Callback callback) {
65
+ }
66
+
67
+ @Override
68
+ public void iso15693_readMultipleBlocks(ReadableMap options, Callback callback) {
69
+ }
70
+
71
+ @Override
72
+ public void iso15693_writeSingleBlock(ReadableMap options, Callback callback) {
73
+ }
74
+
75
+ @Override
76
+ public void iso15693_lockBlock(ReadableMap options, Callback callback) {
77
+ }
78
+
79
+ @Override
80
+ public void iso15693_writeAFI(ReadableMap options, Callback callback) {
81
+ }
82
+
83
+ @Override
84
+ public void iso15693_lockAFI(ReadableMap options, Callback callback) {
85
+ }
86
+
87
+ @Override
88
+ public void iso15693_writeDSFID(ReadableMap options, Callback callback) {
89
+ }
90
+
91
+ @Override
92
+ public void iso15693_lockDSFID(ReadableMap options, Callback callback) {
93
+ }
94
+
95
+ @Override
96
+ public void iso15693_resetToReady(ReadableMap options, Callback callback) {
97
+ }
98
+
99
+ @Override
100
+ public void iso15693_select(ReadableMap options, Callback callback) {
101
+ }
102
+
103
+ @Override
104
+ public void iso15693_stayQuiet(Callback callback) {
105
+ }
106
+
107
+ @Override
108
+ public void iso15693_customCommand(ReadableMap options, Callback callback) {
109
+ }
110
+
111
+ @Override
112
+ public void iso15693_sendRequest(ReadableMap options, Callback callback) {
113
+ }
114
+
115
+ @Override
116
+ public void iso15693_extendedReadSingleBlock(ReadableMap options, Callback callback) {
117
+ }
118
+
119
+ @Override
120
+ public void iso15693_extendedReadMultipleBlocks(ReadableMap options, Callback callback) {
121
+ }
122
+
123
+ @Override
124
+ public void iso15693_extendedWriteSingleBlock(ReadableMap options, Callback callback) {
125
+ }
126
+
127
+ @Override
128
+ public void iso15693_extendedLockBlock(ReadableMap options, Callback callback) {
129
+ }
130
+ }
@@ -0,0 +1,258 @@
1
+ package community.revteltech.nfc;
2
+
3
+ import static community.revteltech.nfc.NfcErrorCodes.*;
4
+
5
+ import android.nfc.tech.IsoDep;
6
+ import android.nfc.tech.MifareClassic;
7
+ import android.nfc.tech.MifareUltralight;
8
+ import android.nfc.tech.NfcA;
9
+ import android.nfc.tech.NfcB;
10
+ import android.nfc.tech.NfcF;
11
+ import android.nfc.tech.NfcV;
12
+ import android.nfc.tech.TagTechnology;
13
+
14
+ import android.util.Log;
15
+
16
+ import com.facebook.react.bridge.Arguments;
17
+ import com.facebook.react.bridge.Callback;
18
+ import com.facebook.react.bridge.ReadableArray;
19
+ import com.facebook.react.bridge.WritableArray;
20
+
21
+ class NfcTechIoRouter {
22
+ private static final String LOG_TAG = "ReactNativeNfcManager";
23
+
24
+ private NfcTechIoRouter() {
25
+ }
26
+
27
+ static void setTimeout(
28
+ TagTechnologyRequest techRequest,
29
+ int timeout,
30
+ Callback callback
31
+ ) {
32
+ if (techRequest == null) {
33
+ callback.invoke(ERR_NO_TECH_REQ);
34
+ return;
35
+ }
36
+
37
+ try {
38
+ String tech = techRequest.getTechType();
39
+ TagTechnology baseTechHandle = techRequest.getTechHandle();
40
+ switch (tech) {
41
+ case "NfcA": {
42
+ NfcA techHandle = (NfcA) baseTechHandle;
43
+ techHandle.setTimeout(timeout);
44
+ callback.invoke();
45
+ return;
46
+ }
47
+ case "NfcF": {
48
+ NfcF techHandle = (NfcF) baseTechHandle;
49
+ techHandle.setTimeout(timeout);
50
+ callback.invoke();
51
+ return;
52
+ }
53
+ case "IsoDep": {
54
+ IsoDep techHandle = (IsoDep) baseTechHandle;
55
+ techHandle.setTimeout(timeout);
56
+ callback.invoke();
57
+ return;
58
+ }
59
+ case "MifareClassic": {
60
+ MifareClassic techHandle = (MifareClassic) baseTechHandle;
61
+ techHandle.setTimeout(timeout);
62
+ callback.invoke();
63
+ return;
64
+ }
65
+ case "MifareUltralight": {
66
+ MifareUltralight techHandle = (MifareUltralight) baseTechHandle;
67
+ techHandle.setTimeout(timeout);
68
+ callback.invoke();
69
+ return;
70
+ }
71
+ }
72
+
73
+ Log.d(LOG_TAG, "setTimeout not supported");
74
+ callback.invoke(ERR_API_NOT_SUPPORT);
75
+ } catch (Exception ex) {
76
+ Log.d(LOG_TAG, ex.toString());
77
+ callback.invoke(ex.toString());
78
+ }
79
+ }
80
+
81
+ static void getTimeout(
82
+ TagTechnologyRequest techRequest,
83
+ Callback callback
84
+ ) {
85
+ if (techRequest == null) {
86
+ callback.invoke(ERR_NO_TECH_REQ);
87
+ return;
88
+ }
89
+
90
+ try {
91
+ String tech = techRequest.getTechType();
92
+ TagTechnology baseTechHandle = techRequest.getTechHandle();
93
+ switch (tech) {
94
+ case "NfcA": {
95
+ NfcA techHandle = (NfcA) baseTechHandle;
96
+ callback.invoke(null, techHandle.getTimeout());
97
+ return;
98
+ }
99
+ case "NfcF": {
100
+ NfcF techHandle = (NfcF) baseTechHandle;
101
+ callback.invoke(null, techHandle.getTimeout());
102
+ return;
103
+ }
104
+ case "IsoDep": {
105
+ IsoDep techHandle = (IsoDep) baseTechHandle;
106
+ callback.invoke(null, techHandle.getTimeout());
107
+ return;
108
+ }
109
+ case "MifareClassic": {
110
+ MifareClassic techHandle = (MifareClassic) baseTechHandle;
111
+ callback.invoke(null, techHandle.getTimeout());
112
+ return;
113
+ }
114
+ case "MifareUltralight": {
115
+ MifareUltralight techHandle = (MifareUltralight) baseTechHandle;
116
+ callback.invoke(null, techHandle.getTimeout());
117
+ return;
118
+ }
119
+ }
120
+
121
+ Log.d(LOG_TAG, "getTimeout not supported");
122
+ callback.invoke(ERR_API_NOT_SUPPORT);
123
+ } catch (Exception ex) {
124
+ Log.d(LOG_TAG, ex.toString());
125
+ callback.invoke(ex.toString());
126
+ }
127
+ }
128
+
129
+ static void transceive(
130
+ TagTechnologyRequest techRequest,
131
+ ReadableArray rnArray,
132
+ Callback callback
133
+ ) {
134
+ if (techRequest == null) {
135
+ callback.invoke(ERR_NO_TECH_REQ);
136
+ return;
137
+ }
138
+
139
+ try {
140
+ String tech = techRequest.getTechType();
141
+ byte[] bytes = rnArrayToBytes(rnArray);
142
+ TagTechnology baseTechHandle = techRequest.getTechHandle();
143
+
144
+ switch (tech) {
145
+ case "NfcA": {
146
+ NfcA techHandle = (NfcA) baseTechHandle;
147
+ callback.invoke(null, bytesToRnArray(techHandle.transceive(bytes)));
148
+ return;
149
+ }
150
+ case "NfcB": {
151
+ NfcB techHandle = (NfcB) baseTechHandle;
152
+ callback.invoke(null, bytesToRnArray(techHandle.transceive(bytes)));
153
+ return;
154
+ }
155
+ case "NfcF": {
156
+ NfcF techHandle = (NfcF) baseTechHandle;
157
+ callback.invoke(null, bytesToRnArray(techHandle.transceive(bytes)));
158
+ return;
159
+ }
160
+ case "NfcV": {
161
+ NfcV techHandle = (NfcV) baseTechHandle;
162
+ callback.invoke(null, bytesToRnArray(techHandle.transceive(bytes)));
163
+ return;
164
+ }
165
+ case "IsoDep": {
166
+ IsoDep techHandle = (IsoDep) baseTechHandle;
167
+ callback.invoke(null, bytesToRnArray(techHandle.transceive(bytes)));
168
+ return;
169
+ }
170
+ case "MifareClassic": {
171
+ MifareClassic techHandle = (MifareClassic) baseTechHandle;
172
+ callback.invoke(null, bytesToRnArray(techHandle.transceive(bytes)));
173
+ return;
174
+ }
175
+ case "MifareUltralight": {
176
+ MifareUltralight techHandle = (MifareUltralight) baseTechHandle;
177
+ callback.invoke(null, bytesToRnArray(techHandle.transceive(bytes)));
178
+ return;
179
+ }
180
+ }
181
+
182
+ Log.d(LOG_TAG, "transceive not supported");
183
+ callback.invoke(ERR_API_NOT_SUPPORT);
184
+ } catch (Exception ex) {
185
+ Log.d(LOG_TAG, "transceive fail: " + ex);
186
+ callback.invoke(ERR_TRANSCEIVE_FAIL);
187
+ }
188
+ }
189
+
190
+ static void getMaxTransceiveLength(
191
+ TagTechnologyRequest techRequest,
192
+ Callback callback
193
+ ) {
194
+ if (techRequest == null) {
195
+ callback.invoke(ERR_NO_TECH_REQ);
196
+ return;
197
+ }
198
+
199
+ try {
200
+ String tech = techRequest.getTechType();
201
+ TagTechnology baseTechHandle = techRequest.getTechHandle();
202
+ switch (tech) {
203
+ case "NfcA": {
204
+ NfcA techHandle = (NfcA) baseTechHandle;
205
+ callback.invoke(null, techHandle.getMaxTransceiveLength());
206
+ return;
207
+ }
208
+ case "NfcB": {
209
+ NfcB techHandle = (NfcB) baseTechHandle;
210
+ callback.invoke(null, techHandle.getMaxTransceiveLength());
211
+ return;
212
+ }
213
+ case "NfcF": {
214
+ NfcF techHandle = (NfcF) baseTechHandle;
215
+ callback.invoke(null, techHandle.getMaxTransceiveLength());
216
+ return;
217
+ }
218
+ case "NfcV": {
219
+ NfcV techHandle = (NfcV) baseTechHandle;
220
+ callback.invoke(null, techHandle.getMaxTransceiveLength());
221
+ return;
222
+ }
223
+ case "IsoDep": {
224
+ IsoDep techHandle = (IsoDep) baseTechHandle;
225
+ callback.invoke(null, techHandle.getMaxTransceiveLength());
226
+ return;
227
+ }
228
+ case "MifareUltralight": {
229
+ MifareUltralight techHandle = (MifareUltralight) baseTechHandle;
230
+ callback.invoke(null, techHandle.getMaxTransceiveLength());
231
+ return;
232
+ }
233
+ }
234
+
235
+ Log.d(LOG_TAG, "getMaxTransceiveLength not supported");
236
+ callback.invoke(ERR_API_NOT_SUPPORT);
237
+ } catch (Exception ex) {
238
+ Log.d(LOG_TAG, "getMaxTransceiveLength fail");
239
+ callback.invoke(ex.toString());
240
+ }
241
+ }
242
+
243
+ private static byte[] rnArrayToBytes(ReadableArray rArray) {
244
+ byte[] bytes = new byte[rArray.size()];
245
+ for (int i = 0; i < rArray.size(); i++) {
246
+ bytes[i] = (byte) (rArray.getInt(i) & 0xff);
247
+ }
248
+ return bytes;
249
+ }
250
+
251
+ private static WritableArray bytesToRnArray(byte[] bytes) {
252
+ WritableArray value = Arguments.createArray();
253
+ for (byte aByte : bytes) {
254
+ value.pushInt((aByte & 0xFF));
255
+ }
256
+ return value;
257
+ }
258
+ }
@@ -33,19 +33,25 @@ class TagTechnologyRequest {
33
33
  }
34
34
 
35
35
  void invokePendingCallbackWithError(String err) {
36
- if (mJsCallback != null) {
37
- mJsCallback.invoke(err);
38
- mJsCallback = null;
36
+ Callback callback = takePendingCallback();
37
+ if (callback != null) {
38
+ callback.invoke(err);
39
39
  }
40
40
  }
41
41
 
42
42
  void invokePendingCallback(String connectedTech) {
43
- if (mJsCallback != null) {
44
- mJsCallback.invoke(null, connectedTech);
45
- mJsCallback = null;
43
+ Callback callback = takePendingCallback();
44
+ if (callback != null) {
45
+ callback.invoke(null, connectedTech);
46
46
  }
47
47
  }
48
48
 
49
+ private Callback takePendingCallback() {
50
+ Callback callback = mJsCallback;
51
+ mJsCallback = null;
52
+ return callback;
53
+ }
54
+
49
55
  TagTechnology getTechHandle() {
50
56
  return mTech;
51
57
  }
@@ -122,9 +128,15 @@ class TagTechnologyRequest {
122
128
 
123
129
  void close() {
124
130
  try {
125
- mTech.close();
131
+ if (mTech != null) {
132
+ mTech.close();
133
+ }
126
134
  } catch (Exception ex) {
127
135
  Log.d(LOG_TAG, "fail to close tech");
136
+ } finally {
137
+ mTag = null;
138
+ mTech = null;
139
+ mTechType = null;
128
140
  }
129
141
  }
130
142
  }