react-native-nfc-manager 4.0.0-beta.7 → 4.0.0-beta.9

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 (107) hide show
  1. package/README.md +37 -3
  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 +333 -1119
  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 +201 -0
  12. package/dist/ndef-lib/constants.js +67 -0
  13. package/dist/ndef-lib/constants.js.map +1 -0
  14. package/dist/ndef-lib/index.js +79 -0
  15. package/dist/ndef-lib/index.js.map +1 -0
  16. package/dist/ndef-lib/ndef-text.js +29 -0
  17. package/dist/ndef-lib/ndef-text.js.map +1 -0
  18. package/dist/ndef-lib/ndef-uri.js +40 -0
  19. package/dist/ndef-lib/ndef-uri.js.map +1 -0
  20. package/dist/ndef-lib/ndef-wifi-simple.js +100 -0
  21. package/dist/ndef-lib/ndef-wifi-simple.js.map +1 -0
  22. package/dist/ndef-lib/ndef.js +153 -0
  23. package/dist/ndef-lib/ndef.js.map +1 -0
  24. package/dist/ndef-lib/stringifier.js +155 -0
  25. package/dist/ndef-lib/stringifier.js.map +1 -0
  26. package/dist/ndef-lib/util.js +126 -0
  27. package/dist/ndef-lib/util.js.map +1 -0
  28. package/dist/specs/NativeNfcManager.js +5 -0
  29. package/dist/specs/NativeNfcManager.js.map +1 -0
  30. package/dist/src/NativeNfcManager.js +55 -0
  31. package/dist/src/NativeNfcManager.js.map +1 -0
  32. package/dist/src/NfcError.js +220 -0
  33. package/dist/src/NfcError.js.map +1 -0
  34. package/dist/src/NfcManager.js +175 -0
  35. package/dist/src/NfcManager.js.map +1 -0
  36. package/dist/src/NfcManagerAndroid.js +112 -0
  37. package/dist/src/NfcManagerAndroid.js.map +1 -0
  38. package/dist/src/NfcManagerIOS.js +119 -0
  39. package/dist/src/NfcManagerIOS.js.map +1 -0
  40. package/dist/src/NfcTech/Iso15693HandlerIOS.js +99 -0
  41. package/dist/src/NfcTech/Iso15693HandlerIOS.js.map +1 -0
  42. package/dist/src/NfcTech/IsoDepHandler.js +29 -0
  43. package/dist/src/NfcTech/IsoDepHandler.js.map +1 -0
  44. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js +68 -0
  45. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js.map +1 -0
  46. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js +23 -0
  47. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js.map +1 -0
  48. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js +16 -0
  49. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js.map +1 -0
  50. package/dist/src/NfcTech/NdefHandler.js +54 -0
  51. package/dist/src/NfcTech/NdefHandler.js.map +1 -0
  52. package/dist/src/NfcTech/NfcAHandler.js +16 -0
  53. package/dist/src/NfcTech/NfcAHandler.js.map +1 -0
  54. package/dist/src/NfcTech/NfcVHandler.js +33 -0
  55. package/dist/src/NfcTech/NfcVHandler.js.map +1 -0
  56. package/dist/src/index.js +53 -0
  57. package/dist/src/index.js.map +1 -0
  58. package/index.d.ts +76 -43
  59. package/ios/NfcManager.h +2 -10
  60. package/ios/NfcManager.mm +176 -434
  61. package/ios/RNNfcBridgeUtil.h +28 -0
  62. package/ios/RNNfcBridgeUtil.mm +52 -0
  63. package/ios/RNNfcManager+Felica.swift +61 -0
  64. package/ios/RNNfcManager+Iso15693.swift +895 -0
  65. package/ios/RNNfcManager+IsoDep.swift +145 -0
  66. package/ios/RNNfcManager+Mifare.swift +61 -0
  67. package/ios/RNNfcManager+Ndef.swift +120 -0
  68. package/ios/RNNfcManager.h +251 -0
  69. package/ios/RNNfcManager.swift +648 -0
  70. package/ios/RNNfcSessionDelegateProxy.swift +104 -0
  71. package/ios/RNNfcSwiftUtil.swift +34 -0
  72. package/ndef-lib/{constants.js → constants.ts} +2 -0
  73. package/ndef-lib/{index.js → index.ts} +23 -12
  74. package/ndef-lib/{ndef-text.js → ndef-text.ts} +7 -2
  75. package/ndef-lib/{ndef-uri.js → ndef-uri.ts} +8 -3
  76. package/ndef-lib/{ndef-wifi-simple.js → ndef-wifi-simple.ts} +34 -11
  77. package/ndef-lib/{ndef.js → ndef.ts} +49 -20
  78. package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
  79. package/ndef-lib/{util.js → util.ts} +13 -8
  80. package/package.json +21 -7
  81. package/react-native-nfc-manager.podspec +3 -2
  82. package/specs/NativeNfcManager.ts +17 -3
  83. package/src/NativeNfcManager.ts +84 -0
  84. package/src/{NfcError.js → NfcError.ts} +6 -17
  85. package/src/{NfcManager.js → NfcManager.ts} +49 -34
  86. package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +25 -8
  87. package/src/{NfcManagerIOS.js → NfcManagerIOS.ts} +31 -10
  88. package/src/NfcTech/{Iso15693HandlerIOS.js → Iso15693HandlerIOS.ts} +64 -36
  89. package/src/NfcTech/{IsoDepHandler.js → IsoDepHandler.ts} +8 -5
  90. package/src/NfcTech/{MifareClassicHandlerAndroid.js → MifareClassicHandlerAndroid.ts} +33 -24
  91. package/src/NfcTech/{MifareUltralightHandlerAndroid.js → MifareUltralightHandlerAndroid.ts} +14 -5
  92. package/src/NfcTech/{NdefFormatableHandlerAndroid.js → NdefFormatableHandlerAndroid.ts} +9 -2
  93. package/src/NfcTech/{NdefHandler.js → NdefHandler.ts} +19 -6
  94. package/src/NfcTech/{NfcAHandler.js → NfcAHandler.ts} +6 -3
  95. package/src/NfcTech/{NfcVHandler.js → NfcVHandler.ts} +8 -5
  96. package/src/__mocks__/{NativeNfcManager.js → NativeNfcManager.ts} +4 -1
  97. package/src/{index.js → index.ts} +1 -1
  98. package/android/src/main/java/community/revteltech/nfc/JsonConvert.java +0 -141
  99. package/android/src/main/java/community/revteltech/nfc/MifareUtil.java +0 -84
  100. package/ios/NfcManager+Felica.mm +0 -43
  101. package/ios/NfcManager+Iso15693.mm +0 -600
  102. package/ios/NfcManager+IsoDep.mm +0 -83
  103. package/ios/NfcManager+Mifare.mm +0 -43
  104. package/ios/Util.mm +0 -55
  105. package/specs/NativeNfcManager.js +0 -3
  106. package/specs/NativeNfcManager.js.map +0 -1
  107. package/src/NativeNfcManager.js +0 -37
package/ios/NfcManager.mm CHANGED
@@ -3,18 +3,14 @@
3
3
  #import "React/RCTConvert.h"
4
4
  #import "React/RCTEventDispatcher.h"
5
5
  #import "React/RCTLog.h"
6
+ #import "RNNfcBridgeUtil.h"
7
+ #import "RNNfcManager.h"
6
8
 
7
9
  @implementation NfcManager {
8
- NSDictionary *nfcTechTypes;
9
- NSArray *techRequestTypes;
10
- RCTResponseSenderBlock techRequestCallback;
11
10
  }
12
11
 
13
12
  RCT_EXPORT_MODULE()
14
13
 
15
- @synthesize session;
16
- @synthesize tagSession;
17
-
18
14
  static NSString *const kBgNfcTagNotification = @"RNBgNfcTagNotification";
19
15
  NSArray * bgNdefRecords = nil;
20
16
 
@@ -30,7 +26,7 @@ continueUserActivity:(NSUserActivity *)userActivity
30
26
  if (@available(iOS 12.0, *)) {
31
27
  NFCNDEFMessage * ndefMessage = userActivity.ndefMessagePayload;
32
28
  if (ndefMessage != nil) {
33
- bgNdefRecords = [NfcManager convertNdefMessage: ndefMessage];
29
+ bgNdefRecords = [RNNfcManager convertNdefMessage:ndefMessage];
34
30
  [[NSNotificationCenter defaultCenter] postNotificationName:kBgNfcTagNotification
35
31
  object:self
36
32
  userInfo:nil];
@@ -42,41 +38,56 @@ continueUserActivity:(NSUserActivity *)userActivity
42
38
 
43
39
  - (void)handleBgNfcTagNotification:(NSNotification *)notification
44
40
  {
45
- [self sendEventWithName:@"NfcManagerDiscoverBackgroundTag"
46
- body:@{@"ndefMessage": bgNdefRecords}];
41
+ [RNNfcBridgeUtil emitEvent:@"NfcManagerDiscoverBackgroundTag"
42
+ body:@{@"ndefMessage": bgNdefRecords}];
47
43
  }
48
44
 
49
45
  - (instancetype)init
50
46
  {
51
47
  if (self = [super init]) {
52
48
  NSLog(@"NfcManager created");
49
+ __weak NfcManager *weakSelf = self;
50
+ [RNNfcBridgeUtil setEventEmitter:^(NSString *name, id body) {
51
+ NfcManager *strongSelf = weakSelf;
52
+ if (strongSelf == nil) {
53
+ return;
54
+ }
55
+ #ifdef RCT_NEW_ARCH_ENABLED
56
+ if ([name isEqualToString:@"NfcManagerDiscoverTag"]) {
57
+ [strongSelf emitOnDiscoverTag:(NSDictionary *)body];
58
+ } else if ([name isEqualToString:@"NfcManagerDiscoverBackgroundTag"]) {
59
+ [strongSelf emitOnDiscoverBackgroundTag:(NSDictionary *)body];
60
+ } else if ([name isEqualToString:@"NfcManagerSessionClosed"]) {
61
+ [strongSelf emitOnSessionClosed:(NSDictionary *)body];
62
+ }
63
+ #else
64
+ [strongSelf sendEventWithName:name body:body];
65
+ #endif
66
+ }];
53
67
  [[NSNotificationCenter defaultCenter] addObserver:self
54
68
  selector:@selector(handleBgNfcTagNotification:)
55
69
  name:kBgNfcTagNotification
56
70
  object:nil];
57
71
  }
58
72
 
59
- if (@available(iOS 13.0, *)) {
60
- nfcTechTypes = @{
61
- [NSNumber numberWithInt: NFCTagTypeMiFare]: @"mifare",
62
- [NSNumber numberWithInt: NFCTagTypeFeliCa]: @"felica",
63
- [NSNumber numberWithInt: NFCTagTypeISO15693]: @"iso15693",
64
- // compatible with Android
65
- [NSNumber numberWithInt: NFCTagTypeISO7816Compatible]: @"IsoDep",
66
- };
67
- } else {
68
- nfcTechTypes = nil;
69
- }
70
-
71
73
  return self;
72
74
  }
73
75
 
74
76
  - (void)reset
75
77
  {
76
- session = nil;
77
- tagSession = nil;
78
- techRequestTypes = nil;
79
- techRequestCallback = nil;
78
+ [RNNfcManager invalidateRuntimeState];
79
+ }
80
+
81
+ - (void)invalidate
82
+ {
83
+ [[NSNotificationCenter defaultCenter] removeObserver:self
84
+ name:kBgNfcTagNotification
85
+ object:nil];
86
+ [RNNfcBridgeUtil setEventEmitter:nil];
87
+ [RNNfcManager invalidateRuntimeState];
88
+ #ifndef RCT_NEW_ARCH_ENABLED
89
+ [super invalidate];
90
+ #endif
80
91
  }
81
92
 
82
93
  - (NSArray<NSString *> *)supportedEvents
@@ -88,155 +99,25 @@ continueUserActivity:(NSUserActivity *)userActivity
88
99
  ];
89
100
  }
90
101
 
91
- + (NSDictionary*)convertNdefRecord:(NFCNDEFPayload *) record
102
+ + (BOOL)requiresMainQueueSetup
92
103
  {
93
- return @{
94
- @"id": dataToArray([record identifier]),
95
- @"payload": dataToArray([record payload]),
96
- @"type": dataToArray([record type]),
97
- @"tnf": [NSNumber numberWithInt:[record typeNameFormat]]
98
- };
104
+ return YES;
99
105
  }
100
106
 
101
- + (NSArray*)convertNdefMessage:(NFCNDEFMessage *)message
107
+ - (dispatch_queue_t)methodQueue
102
108
  {
103
- NSArray * records = [message records];
104
- NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity: [records count]];
105
- for (int i = 0; i < [records count]; i++) {
106
- [resultArray addObject:[self convertNdefRecord: records[i]]];
107
- }
108
- return resultArray;
109
- }
110
-
111
- - (NSString*)getRNTechName:(id<NFCTag>)tag {
112
- NSString * tech = [nfcTechTypes objectForKey:[NSNumber numberWithInt:(int)tag.type]];
113
- if (tech == nil) {
114
- tech = @"unknown";
115
- }
116
- return tech;
117
- }
118
-
119
- - (NSDictionary*)getRNTag:(id<NFCTag>)tag {
120
- NSMutableDictionary *tagInfo = @{}.mutableCopy;
121
- NSString* tech = [self getRNTechName:tag];
122
- [tagInfo setObject:tech forKey:@"tech"];
123
-
124
- if (@available(iOS 13.0, *)) {
125
- if (tag.type == NFCTagTypeMiFare) {
126
- id<NFCMiFareTag> mifareTag = [tag asNFCMiFareTag];
127
- [tagInfo setObject:getHexString(mifareTag.identifier) forKey:@"id"];
128
- } else if (tag.type == NFCTagTypeISO7816Compatible) {
129
- id<NFCISO7816Tag> iso7816Tag = [tag asNFCISO7816Tag];
130
- [tagInfo setObject:getHexString(iso7816Tag.identifier) forKey:@"id"];
131
- [tagInfo setObject:iso7816Tag.initialSelectedAID forKey:@"initialSelectedAID"];
132
- [tagInfo setObject:dataToArray(iso7816Tag.historicalBytes) forKey:@"historicalBytes"];
133
- [tagInfo setObject:dataToArray(iso7816Tag.applicationData) forKey:@"applicationData"];
134
- } else if (tag.type == NFCTagTypeISO15693) {
135
- id<NFCISO15693Tag> iso15693Tag = [tag asNFCISO15693Tag];
136
- [tagInfo setObject:getHexString(iso15693Tag.identifier) forKey:@"id"];
137
- [tagInfo setObject:[NSNumber numberWithUnsignedInteger:iso15693Tag.icManufacturerCode] forKey:@"icManufacturerCode"];
138
- [tagInfo setObject:dataToArray(iso15693Tag.icSerialNumber) forKey:@"icSerialNumber"];
139
- } else if (tag.type == NFCTagTypeFeliCa) {
140
- id<NFCFeliCaTag> felicaTag = [tag asNFCFeliCaTag];
141
- [tagInfo setObject:getHexString(felicaTag.currentIDm) forKey:@"idm"];
142
- [tagInfo setObject:getHexString(felicaTag.currentSystemCode) forKey:@"systemCode"];
143
- }
144
- }
145
-
146
- return tagInfo;
147
- }
148
-
149
- - (id<NFCNDEFTag>)getNDEFTagHandle:(id<NFCTag>)tag
150
- API_AVAILABLE(ios(13.0)) {
151
- // all following types inherite from NFCNDEFTag
152
- if (tag.type == NFCTagTypeMiFare) {
153
- return [tag asNFCMiFareTag];
154
- } else if (tag.type == NFCTagTypeISO7816Compatible) {
155
- return [tag asNFCISO7816Tag];
156
- } else if (tag.type == NFCTagTypeISO15693) {
157
- return [tag asNFCISO15693Tag];
158
- } else if (tag.type == NFCTagTypeFeliCa) {
159
- return [tag asNFCFeliCaTag];
160
- }
161
-
162
- return nil;
109
+ return dispatch_get_main_queue();
163
110
  }
164
111
 
165
- - (void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages
112
+ #ifdef RCT_NEW_ARCH_ENABLED
113
+ - (void)addListener:(NSString *)eventName
166
114
  {
167
- NSLog(@"readerSession:didDetectNDEFs");
168
- if ([messages count] > 0) {
169
- // parse the first message for now
170
- [self sendEventWithName:@"NfcManagerDiscoverTag"
171
- body:@{@"ndefMessage": [NfcManager convertNdefMessage:messages[0]]}];
172
- } else {
173
- [self sendEventWithName:@"NfcManagerDiscoverTag"
174
- body:@{@"ndefMessage": @[]}];
175
- }
176
- }
177
-
178
- - (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error
179
- {
180
- NSLog(@"readerSession:didInvalidateWithError: (%@)", [error localizedDescription]);
181
- [self reset];
182
- [self sendEventWithName:@"NfcManagerSessionClosed"
183
- body:@{@"error": getErrorMessage(error)}];
184
- }
185
-
186
- - (void)tagReaderSession:(NFCTagReaderSession *)session didDetectTags:(NSArray<__kindof id<NFCTag>> *)tags
187
- API_AVAILABLE(ios(13.0)) {
188
- NSLog(@"NFCTag didDetectTags");
189
- if (techRequestCallback != nil) {
190
- for (id<NFCTag> tag in tags) {
191
- NSString * tagType = [self getRNTechName:tag];
192
-
193
- for (NSString* requestType in techRequestTypes) {
194
- // here we treat Ndef is a special case, because all specific tech types
195
- // inherites from NFCNDEFTag, so we simply allow it to connect
196
- if ([tagType isEqualToString:requestType] || [requestType isEqualToString:@"Ndef"]) {
197
- RCTResponseSenderBlock pendingCallback = techRequestCallback;
198
-
199
- [tagSession connectToTag:tag
200
- completionHandler:^(NSError *error) {
201
- if (error != nil) {
202
- NSLog(@"NFCTag restarting polling");
203
- [self->tagSession restartPolling];
204
- return;
205
- }
206
-
207
- self->techRequestCallback = nil;
208
-
209
- pendingCallback(@[[NSNull null], requestType]);
210
- }];
211
- return;
212
- }
213
- }
214
- }
215
- }
216
- }
217
-
218
- - (void)tagReaderSession:(NFCTagReaderSession *)session didInvalidateWithError:(NSError *)error
219
- API_AVAILABLE(ios(13.0)) {
220
- NSLog(@"NFCTag didInvalidateWithError");
221
- if (techRequestCallback) {
222
- techRequestCallback(@[getErrorMessage(error)]);
223
- techRequestCallback = nil;
224
- }
225
-
226
- [self reset];
227
- [self sendEventWithName:@"NfcManagerSessionClosed"
228
- body:@{@"error": getErrorMessage(error)}];
229
115
  }
230
116
 
231
- - (void)tagReaderSessionDidBecomeActive:(NFCTagReaderSession *)session
232
- API_AVAILABLE(ios(13.0)) {
233
- NSLog(@"NFCTag didBecomeActive");
234
- }
235
-
236
- + (BOOL)requiresMainQueueSetup
117
+ - (void)removeListeners:(double)count
237
118
  {
238
- return YES;
239
119
  }
120
+ #endif
240
121
 
241
122
  - (void)getBackgroundTag: (nonnull RCTResponseSenderBlock)callback
242
123
  {
@@ -256,341 +137,202 @@ continueUserActivity:(NSUserActivity *)userActivity
256
137
 
257
138
  - (void)isSupported: (NSString *)tech callback:(nonnull RCTResponseSenderBlock)callback
258
139
  {
259
- if ([tech isEqualToString:@""] || [tech isEqualToString:@"Ndef"]) {
260
- if (@available(iOS 11.0, *)) {
261
- callback(@[[NSNull null], NFCNDEFReaderSession.readingAvailable ? @YES : @NO]);
262
- return;
263
- }
264
- } else if ([tech isEqualToString:@"mifare"] || [tech isEqualToString:@"felica"] || [tech isEqualToString:@"iso15693"] || [tech isEqualToString:@"IsoDep"]) {
265
- if (@available(iOS 13.0, *)) {
266
- callback(@[[NSNull null], NFCTagReaderSession.readingAvailable ? @YES : @NO]);
267
- return;
268
- }
269
- }
270
-
271
- callback(@[[NSNull null], @NO]);
140
+ [RNNfcManager isSupported:tech callback:callback];
272
141
  }
273
142
 
274
143
  - (void)start: (nonnull RCTResponseSenderBlock)callback
275
144
  {
276
- if (@available(iOS 11.0, *)) {
277
- if (NFCNDEFReaderSession.readingAvailable) {
278
- NSLog(@"NfcManager initialized");
279
- [self reset];
280
- callback(@[]);
281
- return;
282
- }
283
- }
284
-
285
- callback(@[@"Not support in this device", [NSNull null]]);
145
+ [RNNfcManager startWithCallback:callback];
286
146
  }
287
147
 
288
148
  -(void)requestTechnology: (NSArray *)techs options: (NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
289
149
  {
290
- if (@available(iOS 13.0, *)) {
291
- if (tagSession == nil && session == nil) {
292
- NFCPollingOption pollFlags = NFCPollingISO14443 | NFCPollingISO15693;
293
- if ([techs containsObject:@"felica"]) {
294
- pollFlags |= NFCPollingISO18092;
295
- }
296
- tagSession = [[NFCTagReaderSession alloc]
297
- initWithPollingOption:pollFlags delegate:self queue:dispatch_get_main_queue()];
298
- tagSession.alertMessage = [options objectForKey:@"alertMessage"];
299
- [tagSession beginSession];
300
- techRequestTypes = techs;
301
- techRequestCallback = callback;
302
- } else {
303
- callback(@[@"Duplicated registration", [NSNull null]]);
304
- }
305
- } else {
306
- callback(@[@"Not support in this device", [NSNull null]]);
307
- }
150
+ [RNNfcManager createAndBeginTagSessionWithTechs:techs options:options callback:callback];
308
151
  }
309
152
 
310
153
  - (void)restartTechnologyRequest:(nonnull RCTResponseSenderBlock)callback
311
154
  {
312
- if (@available(iOS 13.0, *)) {
313
- if (tagSession != nil) {
314
- NSLog(@"NfcManager restarting polling");
315
- [self->tagSession restartPolling];
316
- techRequestCallback = callback;
317
- } else {
318
- callback(@[@"No active registration", [NSNull null]]);
319
- }
320
- } else {
321
- callback(@[@"Not support in this device", [NSNull null]]);
322
- }
155
+ [RNNfcManager restartTechnologyRequestWithCallback:callback];
323
156
  }
324
157
 
325
158
  - (void)cancelTechnologyRequest:(nonnull RCTResponseSenderBlock)callback
326
159
  {
327
- if (@available(iOS 13.0, *)) {
328
- if (tagSession != nil) {
329
- [tagSession invalidateSession];
330
- tagSession = nil;
331
- callback(@[]);
332
- } else {
333
- callback(@[@"Not even registered", [NSNull null]]);
334
- }
335
- } else {
336
- callback(@[@"Not support in this device", [NSNull null]]);
337
- }
160
+ [RNNfcManager cancelTechnologyRequestWithCallback:callback];
338
161
  }
339
162
 
340
163
  - (void)registerTagEvent:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
341
164
  {
342
- if (@available(iOS 11.0, *)) {
343
- if (session == nil && tagSession == nil) {
344
- session = [[NFCNDEFReaderSession alloc]
345
- initWithDelegate:self queue:dispatch_get_main_queue() invalidateAfterFirstRead:[[options objectForKey:@"invalidateAfterFirstRead"] boolValue]];
346
- session.alertMessage = [options objectForKey:@"alertMessage"];
347
- [session beginSession];
348
- callback(@[]);
349
- } else {
350
- callback(@[@"Duplicated registration", [NSNull null]]);
351
- }
352
- } else {
353
- callback(@[@"Not support in this device", [NSNull null]]);
354
- }
165
+ [RNNfcManager createAndBeginNdefSessionWithOptions:options callback:callback];
355
166
  }
356
167
 
357
168
  - (void)unregisterTagEvent:(nonnull RCTResponseSenderBlock)callback
358
169
  {
359
- if (@available(iOS 11.0, *)) {
360
- if (session != nil) {
361
- [session invalidateSession];
362
- session = nil;
363
- callback(@[]);
364
- } else {
365
- callback(@[@"Not even registered", [NSNull null]]);
366
- }
367
- } else {
368
- callback(@[@"Not support in this device", [NSNull null]]);
369
- }
170
+ [RNNfcManager unregisterTagEventWithCallback:callback];
370
171
  }
371
172
 
372
173
  - (void)invalidateSession:(nonnull RCTResponseSenderBlock)callback
373
174
  {
374
- if (@available(iOS 13.0, *)) {
375
- if (session != nil) {
376
- [session invalidateSession];
377
- session = nil;
378
- callback(@[]);
379
- } else if (tagSession != nil) {
380
- [tagSession invalidateSession];
381
- tagSession = nil;
382
- callback(@[]);
383
- } else {
384
- callback(@[@"No active session", [NSNull null]]);
385
- }
386
- }
175
+ [RNNfcManager invalidateSessionWithCallback:callback];
387
176
  }
388
177
 
389
178
  - (void)invalidateSessionWithError:(NSString *)errorMessage callback:(nonnull RCTResponseSenderBlock)callback
390
179
  {
391
- if (@available(iOS 13.0, *)) {
392
- if (session != nil) {
393
- [session invalidateSessionWithErrorMessage: errorMessage];
394
- session = nil;
395
- callback(@[]);
396
- } else if (tagSession != nil) {
397
- [tagSession invalidateSessionWithErrorMessage: errorMessage];
398
- tagSession = nil;
399
- callback(@[]);
400
- } else {
401
- callback(@[@"No active session", [NSNull null]]);
402
- }
403
- }
180
+ [RNNfcManager invalidateSessionWithErrorMessage:errorMessage callback:callback];
404
181
  }
405
182
 
406
183
  - (void)getTag: (nonnull RCTResponseSenderBlock)callback
407
184
  {
408
- if (@available(iOS 13.0, *)) {
409
- NSMutableDictionary* rnTag = @{}.mutableCopy;
410
- id<NFCNDEFTag> ndefTag = nil;
411
-
412
- if (tagSession != nil) {
413
- if (tagSession.connectedTag) {
414
- rnTag = [self getRNTag:tagSession.connectedTag].mutableCopy;
415
- ndefTag = [self getNDEFTagHandle:tagSession.connectedTag];
416
- }
417
- } else {
418
- callback(@[@"No session available", [NSNull null]]);
419
- }
420
-
421
- if (ndefTag) {
422
- [ndefTag readNDEFWithCompletionHandler:^(NFCNDEFMessage *ndefMessage, NSError *error) {
423
- if (!error) {
424
- [rnTag setObject:[NfcManager convertNdefMessage:ndefMessage] forKey:@"ndefMessage"];
425
- }
426
- callback(@[[NSNull null], rnTag]);
427
- }];
428
- return;
429
- }
430
-
431
- callback(@[[NSNull null], rnTag]);
432
- } else {
433
- callback(@[@"Not support in this device", [NSNull null]]);
434
- }
185
+ [RNNfcManager getTagWithCallback:callback];
435
186
  }
436
187
 
437
188
  - (void)getNdefMessage: (nonnull RCTResponseSenderBlock)callback
438
189
  {
439
- if (@available(iOS 13.0, *)) {
440
- id<NFCNDEFTag> ndefTag = nil;
441
-
442
- if (tagSession != nil) {
443
- if (tagSession.connectedTag) {
444
- ndefTag = [self getNDEFTagHandle:tagSession.connectedTag];
445
- }
446
- }
447
-
448
- if (ndefTag) {
449
- [ndefTag readNDEFWithCompletionHandler:^(NFCNDEFMessage *ndefMessage, NSError *error) {
450
- if (error) {
451
- callback(@[getErrorMessage(error), [NSNull null]]);
452
- } else {
453
- callback(@[[NSNull null], @{@"ndefMessage": [NfcManager convertNdefMessage:ndefMessage]}]);
454
- }
455
- }];
456
- return;
457
- }
458
-
459
- callback(@[@"No ndef available", [NSNull null]]);
460
- } else {
461
- callback(@[@"Not support in this device", [NSNull null]]);
462
- }
190
+ [RNNfcManager getNdefMessageWithCallback:callback];
463
191
  }
464
192
 
465
- - (void)writeNdefMessage:(NSArray*)bytes options:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
193
+ - (void)getCachedNdefMessage: (nonnull RCTResponseSenderBlock)callback
466
194
  {
467
- if (@available(iOS 13.0, *)) {
468
- id<NFCNDEFTag> ndefTag = nil;
469
-
470
- if (tagSession != nil) {
471
- if (tagSession.connectedTag) {
472
- ndefTag = [self getNDEFTagHandle:tagSession.connectedTag];
473
- }
474
- }
475
-
476
- if (ndefTag) {
477
- NSData *data = arrayToData(bytes);
478
- NFCNDEFMessage *ndefMsg = [NFCNDEFMessage ndefMessageWithData:data];
479
- if (!ndefMsg) {
480
- callback(@[@"invalid ndef msg"]);
481
- return;
482
- }
195
+ callback(@[@"unsupported tag api", [NSNull null]]);
196
+ }
483
197
 
484
- [ndefTag writeNDEF:ndefMsg completionHandler:^(NSError *error) {
485
- if (error) {
486
- callback(@[getErrorMessage(error), [NSNull null]]);
487
- } else {
488
- callback(@[[NSNull null]]);
489
- }
490
- }];
491
- return;
492
- }
493
-
494
- callback(@[@"No ndef available", [NSNull null]]);
495
- } else {
496
- callback(@[@"Not support in this device", [NSNull null]]);
497
- }
198
+ - (void)writeNdefMessage:(NSArray*)bytes options:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
199
+ {
200
+ [RNNfcManager writeNdefMessage:bytes options:options callback:callback];
498
201
  }
499
202
 
500
203
  - (void)makeReadOnly:(nonnull RCTResponseSenderBlock)callback
501
204
  {
502
- if (@available(iOS 13.0, *)) {
503
- id<NFCNDEFTag> ndefTag = nil;
504
-
505
- if (tagSession != nil) {
506
- if (tagSession.connectedTag) {
507
- ndefTag = [self getNDEFTagHandle:tagSession.connectedTag];
508
- }
509
- }
510
-
511
- if (ndefTag) {
512
- [ndefTag writeLockWithCompletionHandler:^(NSError *error) {
513
- if (error) {
514
- callback(@[getErrorMessage(error), [NSNull null]]);
515
- } else {
516
- callback(@[[NSNull null]]);
517
- }
518
- }];
519
- return;
520
- }
521
-
522
- callback(@[@"No ndef available", [NSNull null]]);
523
- } else {
524
- callback(@[@"Not support in this device", [NSNull null]]);
525
- }
205
+ [RNNfcManager makeReadOnlyWithCallback:callback];
526
206
  }
527
207
 
528
208
  - (void)queryNdefStatus:(nonnull RCTResponseSenderBlock)callback
529
209
  {
530
- if (@available(iOS 13.0, *)) {
531
- id<NFCNDEFTag> ndefTag = nil;
532
-
533
- if (tagSession != nil) {
534
- if (tagSession.connectedTag) {
535
- ndefTag = [self getNDEFTagHandle:tagSession.connectedTag];
536
- }
537
- }
538
-
539
- if (ndefTag) {
540
- [ndefTag queryNDEFStatusWithCompletionHandler:^(NFCNDEFStatus status, NSUInteger capacity, NSError *error) {
541
- if (error) {
542
- callback(@[getErrorMessage(error), [NSNull null]]);
543
- } else {
544
- callback(@[[NSNull null],
545
- @{
546
- @"status": [[NSNumber alloc] initWithInt:(int)status],
547
- @"capacity": [[NSNumber alloc] initWithInt:(int)capacity]
548
- }
549
- ]);
550
- }
551
- }];
552
- return;
553
- }
554
-
555
- callback(@[@"No ndef available", [NSNull null]]);
556
- } else {
557
- callback(@[@"Not support in this device", [NSNull null]]);
558
- }
210
+ [RNNfcManager queryNdefStatusWithCallback:callback];
559
211
  }
560
212
 
561
213
  - (void)setAlertMessage: (NSString *)alertMessage callback:(nonnull RCTResponseSenderBlock)callback
562
214
  {
563
- if (@available(iOS 11.0, *)) {
564
- if (session != nil) {
565
- session.alertMessage = alertMessage;
566
- callback(@[]);
567
- } else if (tagSession != nil) {
568
- tagSession.alertMessage = alertMessage;
569
- callback(@[]);
570
- } else {
571
- callback(@[@"Not even registered", [NSNull null]]);
572
- }
573
- } else {
574
- callback(@[@"Not support in this device", [NSNull null]]);
575
- }
215
+ [RNNfcManager setAlertMessage:alertMessage callback:callback];
576
216
  }
577
217
 
578
218
  - (void)isSessionAvailable:(nonnull RCTResponseSenderBlock)callback
579
219
  {
580
- if (@available(iOS 11.0, *)) {
581
- callback(@[[NSNull null], session != nil ? @YES : @NO]);
582
- } else {
583
- callback(@[@"Not support in this device", [NSNull null]]);
584
- }
220
+ [RNNfcManager isSessionAvailableWithCallback:callback];
585
221
  }
586
222
 
587
223
  - (void)isTagSessionAvailable:(nonnull RCTResponseSenderBlock)callback
588
224
  {
589
- if (@available(iOS 11.0, *)) {
590
- callback(@[[NSNull null], tagSession != nil ? @YES : @NO]);
591
- } else {
592
- callback(@[@"Not support in this device", [NSNull null]]);
593
- }
225
+ [RNNfcManager isTagSessionAvailableWithCallback:callback];
226
+ }
227
+
228
+ - (void)sendMifareCommand:(NSArray *)bytes callback:(nonnull RCTResponseSenderBlock)callback
229
+ {
230
+ [RNNfcManager sendMifareCommand:bytes callback:callback];
231
+ }
232
+
233
+ - (void)sendFelicaCommand:(NSArray *)bytes callback:(nonnull RCTResponseSenderBlock)callback
234
+ {
235
+ [RNNfcManager sendFelicaCommand:bytes callback:callback];
236
+ }
237
+
238
+ - (void)sendCommandAPDUBytes:(NSArray *)bytes callback:(nonnull RCTResponseSenderBlock)callback
239
+ {
240
+ [RNNfcManager sendCommandAPDUBytes:bytes callback:callback];
241
+ }
242
+
243
+ - (void)sendCommandAPDU:(NSDictionary *)apduData callback:(nonnull RCTResponseSenderBlock)callback
244
+ {
245
+ [RNNfcManager sendCommandAPDU:apduData callback:callback];
246
+ }
247
+
248
+ - (void)iso15693_getSystemInfo:(nonnull NSNumber *)flags callback:(nonnull RCTResponseSenderBlock)callback
249
+ {
250
+ [RNNfcManager iso15693GetSystemInfo:flags callback:callback];
251
+ }
252
+
253
+ - (void)iso15693_readSingleBlock:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
254
+ {
255
+ [RNNfcManager iso15693ReadSingleBlock:options callback:callback];
256
+ }
257
+
258
+ - (void)iso15693_readMultipleBlocks:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
259
+ {
260
+ [RNNfcManager iso15693ReadMultipleBlocks:options callback:callback];
261
+ }
262
+
263
+ - (void)iso15693_writeSingleBlock:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
264
+ {
265
+ [RNNfcManager iso15693WriteSingleBlock:options callback:callback];
266
+ }
267
+
268
+ - (void)iso15693_lockBlock:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
269
+ {
270
+ [RNNfcManager iso15693LockBlock:options callback:callback];
271
+ }
272
+
273
+ - (void)iso15693_writeAFI:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
274
+ {
275
+ [RNNfcManager iso15693WriteAFI:options callback:callback];
276
+ }
277
+
278
+ - (void)iso15693_lockAFI:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
279
+ {
280
+ [RNNfcManager iso15693LockAFI:options callback:callback];
281
+ }
282
+
283
+ - (void)iso15693_writeDSFID:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
284
+ {
285
+ [RNNfcManager iso15693WriteDSFID:options callback:callback];
286
+ }
287
+
288
+ - (void)iso15693_lockDSFID:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
289
+ {
290
+ [RNNfcManager iso15693LockDSFID:options callback:callback];
291
+ }
292
+
293
+ - (void)iso15693_resetToReady:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
294
+ {
295
+ [RNNfcManager iso15693ResetToReady:options callback:callback];
296
+ }
297
+
298
+ - (void)iso15693_select:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
299
+ {
300
+ [RNNfcManager iso15693Select:options callback:callback];
301
+ }
302
+
303
+ - (void)iso15693_stayQuiet:(nonnull RCTResponseSenderBlock)callback
304
+ {
305
+ [RNNfcManager iso15693StayQuiet:callback];
306
+ }
307
+
308
+ - (void)iso15693_customCommand:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
309
+ {
310
+ [RNNfcManager iso15693CustomCommand:options callback:callback];
311
+ }
312
+
313
+ - (void)iso15693_sendRequest:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
314
+ {
315
+ [RNNfcManager iso15693SendRequest:options callback:callback];
316
+ }
317
+
318
+ - (void)iso15693_extendedReadSingleBlock:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
319
+ {
320
+ [RNNfcManager iso15693ExtendedReadSingleBlock:options callback:callback];
321
+ }
322
+
323
+ - (void)iso15693_extendedReadMultipleBlocks:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
324
+ {
325
+ [RNNfcManager iso15693ExtendedReadMultipleBlocks:options callback:callback];
326
+ }
327
+
328
+ - (void)iso15693_extendedWriteSingleBlock:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
329
+ {
330
+ [RNNfcManager iso15693ExtendedWriteSingleBlock:options callback:callback];
331
+ }
332
+
333
+ - (void)iso15693_extendedLockBlock:(NSDictionary *)options callback:(nonnull RCTResponseSenderBlock)callback
334
+ {
335
+ [RNNfcManager iso15693ExtendedLockBlock:options callback:callback];
594
336
  }
595
337
 
596
338
  #ifdef RCT_NEW_ARCH_ENABLED