react-native-nfc-manager 4.0.0-beta.7 → 4.0.0-beta.8
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 +37 -3
- package/android/src/main/java/community/revteltech/nfc/MifareClassicHandler.java +419 -0
- package/android/src/main/java/community/revteltech/nfc/MifareUltralightHandler.java +84 -0
- package/android/src/main/java/community/revteltech/nfc/NdefHandler.java +373 -0
- package/android/src/main/java/community/revteltech/nfc/NfcAdapterStateChangedReceiver.java +48 -0
- package/android/src/main/java/community/revteltech/nfc/NfcErrorCodes.java +16 -0
- package/android/src/main/java/community/revteltech/nfc/NfcManager.java +333 -1119
- package/android/src/main/java/community/revteltech/nfc/NfcManagerIOSStubBase.java +130 -0
- package/android/src/main/java/community/revteltech/nfc/NfcTechIoRouter.java +258 -0
- package/android/src/main/java/community/revteltech/nfc/TagTechnologyRequest.java +19 -7
- package/android/src/main/java/community/revteltech/nfc/Util.java +201 -0
- package/dist/ndef-lib/constants.js +67 -0
- package/dist/ndef-lib/constants.js.map +1 -0
- package/dist/ndef-lib/index.js +79 -0
- package/dist/ndef-lib/index.js.map +1 -0
- package/dist/ndef-lib/ndef-text.js +29 -0
- package/dist/ndef-lib/ndef-text.js.map +1 -0
- package/dist/ndef-lib/ndef-uri.js +40 -0
- package/dist/ndef-lib/ndef-uri.js.map +1 -0
- package/dist/ndef-lib/ndef-wifi-simple.js +100 -0
- package/dist/ndef-lib/ndef-wifi-simple.js.map +1 -0
- package/dist/ndef-lib/ndef.js +153 -0
- package/dist/ndef-lib/ndef.js.map +1 -0
- package/dist/ndef-lib/stringifier.js +155 -0
- package/dist/ndef-lib/stringifier.js.map +1 -0
- package/dist/ndef-lib/util.js +126 -0
- package/dist/ndef-lib/util.js.map +1 -0
- package/dist/specs/NativeNfcManager.js +5 -0
- package/dist/specs/NativeNfcManager.js.map +1 -0
- package/dist/src/NativeNfcManager.js +55 -0
- package/dist/src/NativeNfcManager.js.map +1 -0
- package/dist/src/NfcError.js +220 -0
- package/dist/src/NfcError.js.map +1 -0
- package/dist/src/NfcManager.js +175 -0
- package/dist/src/NfcManager.js.map +1 -0
- package/dist/src/NfcManagerAndroid.js +112 -0
- package/dist/src/NfcManagerAndroid.js.map +1 -0
- package/dist/src/NfcManagerIOS.js +119 -0
- package/dist/src/NfcManagerIOS.js.map +1 -0
- package/dist/src/NfcTech/Iso15693HandlerIOS.js +99 -0
- package/dist/src/NfcTech/Iso15693HandlerIOS.js.map +1 -0
- package/dist/src/NfcTech/IsoDepHandler.js +29 -0
- package/dist/src/NfcTech/IsoDepHandler.js.map +1 -0
- package/dist/src/NfcTech/MifareClassicHandlerAndroid.js +68 -0
- package/dist/src/NfcTech/MifareClassicHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js +23 -0
- package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js +16 -0
- package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/NdefHandler.js +54 -0
- package/dist/src/NfcTech/NdefHandler.js.map +1 -0
- package/dist/src/NfcTech/NfcAHandler.js +16 -0
- package/dist/src/NfcTech/NfcAHandler.js.map +1 -0
- package/dist/src/NfcTech/NfcVHandler.js +33 -0
- package/dist/src/NfcTech/NfcVHandler.js.map +1 -0
- package/dist/src/index.js +53 -0
- package/dist/src/index.js.map +1 -0
- package/index.d.ts +76 -43
- package/ios/NfcManager.h +2 -10
- package/ios/NfcManager.mm +176 -434
- package/ios/RNNfcBridgeUtil.h +28 -0
- package/ios/RNNfcBridgeUtil.mm +52 -0
- package/ios/RNNfcManager+Felica.swift +61 -0
- package/ios/RNNfcManager+Iso15693.swift +895 -0
- package/ios/RNNfcManager+IsoDep.swift +145 -0
- package/ios/RNNfcManager+Mifare.swift +61 -0
- package/ios/RNNfcManager+Ndef.swift +120 -0
- package/ios/RNNfcManager.h +251 -0
- package/ios/RNNfcManager.swift +648 -0
- package/ios/RNNfcSessionDelegateProxy.swift +104 -0
- package/ios/RNNfcSwiftUtil.swift +34 -0
- package/ndef-lib/{constants.js → constants.ts} +2 -0
- package/ndef-lib/{index.js → index.ts} +23 -12
- package/ndef-lib/{ndef-text.js → ndef-text.ts} +7 -2
- package/ndef-lib/{ndef-uri.js → ndef-uri.ts} +8 -3
- package/ndef-lib/{ndef-wifi-simple.js → ndef-wifi-simple.ts} +34 -11
- package/ndef-lib/{ndef.js → ndef.ts} +49 -20
- package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
- package/ndef-lib/{util.js → util.ts} +13 -8
- package/package.json +21 -7
- package/react-native-nfc-manager.podspec +3 -2
- package/specs/NativeNfcManager.ts +17 -4
- package/src/NativeNfcManager.ts +84 -0
- package/src/{NfcError.js → NfcError.ts} +6 -17
- package/src/{NfcManager.js → NfcManager.ts} +49 -34
- package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +25 -8
- package/src/{NfcManagerIOS.js → NfcManagerIOS.ts} +31 -10
- package/src/NfcTech/{Iso15693HandlerIOS.js → Iso15693HandlerIOS.ts} +64 -36
- package/src/NfcTech/{IsoDepHandler.js → IsoDepHandler.ts} +8 -5
- package/src/NfcTech/{MifareClassicHandlerAndroid.js → MifareClassicHandlerAndroid.ts} +33 -24
- package/src/NfcTech/{MifareUltralightHandlerAndroid.js → MifareUltralightHandlerAndroid.ts} +14 -5
- package/src/NfcTech/{NdefFormatableHandlerAndroid.js → NdefFormatableHandlerAndroid.ts} +9 -2
- package/src/NfcTech/{NdefHandler.js → NdefHandler.ts} +19 -6
- package/src/NfcTech/{NfcAHandler.js → NfcAHandler.ts} +6 -3
- package/src/NfcTech/{NfcVHandler.js → NfcVHandler.ts} +8 -5
- package/src/__mocks__/{NativeNfcManager.js → NativeNfcManager.ts} +4 -1
- package/src/{index.js → index.ts} +1 -1
- package/android/src/main/java/community/revteltech/nfc/JsonConvert.java +0 -141
- package/android/src/main/java/community/revteltech/nfc/MifareUtil.java +0 -84
- package/ios/NfcManager+Felica.mm +0 -43
- package/ios/NfcManager+Iso15693.mm +0 -600
- package/ios/NfcManager+IsoDep.mm +0 -83
- package/ios/NfcManager+Mifare.mm +0 -43
- package/ios/Util.mm +0 -55
- package/specs/NativeNfcManager.js +0 -3
- package/specs/NativeNfcManager.js.map +0 -1
- package/src/NativeNfcManager.js +0 -37
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import CoreNFC
|
|
2
|
+
import Foundation
|
|
3
|
+
|
|
4
|
+
public extension RNNfcManager {
|
|
5
|
+
@objc(sendCommandAPDUBytes:callback:)
|
|
6
|
+
static func sendCommandAPDUBytes(
|
|
7
|
+
_ bytes: [NSNumber],
|
|
8
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
9
|
+
) {
|
|
10
|
+
forwardWithTagSessionSupport(
|
|
11
|
+
isTagSessionSupported(),
|
|
12
|
+
callback: callback,
|
|
13
|
+
operation: { tagSession in
|
|
14
|
+
sendCommandAPDUBytes(with: tagSession, bytes: bytes) { response, sw1, sw2, error in
|
|
15
|
+
if let error {
|
|
16
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
callback([NSNull(), response ?? [], sw1 ?? 0, sw2 ?? 0])
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@objc(sendCommandAPDU:callback:)
|
|
27
|
+
static func sendCommandAPDU(
|
|
28
|
+
_ payload: NSDictionary,
|
|
29
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
30
|
+
) {
|
|
31
|
+
forwardWithTagSessionSupport(
|
|
32
|
+
isTagSessionSupported(),
|
|
33
|
+
callback: callback,
|
|
34
|
+
operation: { tagSession in
|
|
35
|
+
sendCommandAPDU(with: tagSession, payload: payload) { response, sw1, sw2, error in
|
|
36
|
+
if let error {
|
|
37
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
38
|
+
return
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
callback([NSNull(), response ?? [], sw1 ?? 0, sw2 ?? 0])
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@objc(sendCommandAPDUBytesWithSession:bytes:completion:)
|
|
48
|
+
static func sendCommandAPDUBytes(
|
|
49
|
+
with session: NFCTagReaderSession,
|
|
50
|
+
bytes: [NSNumber],
|
|
51
|
+
completion: @escaping RNNfcIsoDepResultBlock
|
|
52
|
+
) {
|
|
53
|
+
guard let connectedTag = session.connectedTag else {
|
|
54
|
+
completion(nil, nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
let iso7816Tag = extractIso7816Tag(from: connectedTag)
|
|
59
|
+
guard let iso7816Tag else {
|
|
60
|
+
completion(nil, nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 4, userInfo: [NSLocalizedDescriptionKey: "not an iso7816 tag"]))
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let data = RNNfcSwiftUtil.data(from: bytes)
|
|
65
|
+
guard let apdu = NFCISO7816APDU(data: data) else {
|
|
66
|
+
completion(nil, nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 5, userInfo: [NSLocalizedDescriptionKey: "invalid apdu data"]))
|
|
67
|
+
return
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
iso7816Tag.sendCommand(apdu: apdu) { response, sw1, sw2, error in
|
|
71
|
+
if let error {
|
|
72
|
+
completion(nil, nil, nil, error as NSError)
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
completion(
|
|
77
|
+
RNNfcSwiftUtil.numberArray(from: response),
|
|
78
|
+
NSNumber(value: Int(sw1)),
|
|
79
|
+
NSNumber(value: Int(sw2)),
|
|
80
|
+
nil
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@objc(sendCommandAPDUWithSession:payload:completion:)
|
|
86
|
+
static func sendCommandAPDU(
|
|
87
|
+
with session: NFCTagReaderSession,
|
|
88
|
+
payload: NSDictionary,
|
|
89
|
+
completion: @escaping RNNfcIsoDepResultBlock
|
|
90
|
+
) {
|
|
91
|
+
guard let connectedTag = session.connectedTag else {
|
|
92
|
+
completion(nil, nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
93
|
+
return
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
let iso7816Tag = extractIso7816Tag(from: connectedTag)
|
|
97
|
+
guard let iso7816Tag else {
|
|
98
|
+
completion(nil, nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 4, userInfo: [NSLocalizedDescriptionKey: "not an iso7816 tag"]))
|
|
99
|
+
return
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
guard
|
|
103
|
+
let cla = payload["cla"] as? NSNumber,
|
|
104
|
+
let ins = payload["ins"] as? NSNumber,
|
|
105
|
+
let p1 = payload["p1"] as? NSNumber,
|
|
106
|
+
let p2 = payload["p2"] as? NSNumber,
|
|
107
|
+
let dataArray = payload["data"] as? [NSNumber],
|
|
108
|
+
let le = payload["le"] as? NSNumber
|
|
109
|
+
else {
|
|
110
|
+
completion(nil, nil, nil, NSError(domain: "RNNfcTechSwiftService", code: 6, userInfo: [NSLocalizedDescriptionKey: "invalid apdu payload"]))
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
let data = RNNfcSwiftUtil.data(from: dataArray)
|
|
115
|
+
let apdu = NFCISO7816APDU(
|
|
116
|
+
instructionClass: cla.uint8Value,
|
|
117
|
+
instructionCode: ins.uint8Value,
|
|
118
|
+
p1Parameter: p1.uint8Value,
|
|
119
|
+
p2Parameter: p2.uint8Value,
|
|
120
|
+
data: data,
|
|
121
|
+
expectedResponseLength: le.intValue
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
iso7816Tag.sendCommand(apdu: apdu) { response, sw1, sw2, error in
|
|
125
|
+
if let error {
|
|
126
|
+
completion(nil, nil, nil, error as NSError)
|
|
127
|
+
return
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
completion(
|
|
131
|
+
RNNfcSwiftUtil.numberArray(from: response),
|
|
132
|
+
NSNumber(value: Int(sw1)),
|
|
133
|
+
NSNumber(value: Int(sw2)),
|
|
134
|
+
nil
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private static func extractIso7816Tag(from connectedTag: NFCTag) -> NFCISO7816Tag? {
|
|
140
|
+
if case let .iso7816(tag) = connectedTag {
|
|
141
|
+
return tag
|
|
142
|
+
}
|
|
143
|
+
return nil
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import CoreNFC
|
|
2
|
+
import Foundation
|
|
3
|
+
|
|
4
|
+
public extension RNNfcManager {
|
|
5
|
+
@objc(sendMifareCommand:callback:)
|
|
6
|
+
static func sendMifareCommand(
|
|
7
|
+
_ bytes: [NSNumber],
|
|
8
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
9
|
+
) {
|
|
10
|
+
forwardWithTagSessionSupport(
|
|
11
|
+
isTagSessionSupported(),
|
|
12
|
+
callback: callback,
|
|
13
|
+
operation: { tagSession in
|
|
14
|
+
sendMifareCommand(with: tagSession, bytes: bytes) { response, error in
|
|
15
|
+
if let error {
|
|
16
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
17
|
+
return
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
callback([NSNull(), response ?? []])
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@objc(sendMifareCommandWithSession:bytes:completion:)
|
|
27
|
+
static func sendMifareCommand(
|
|
28
|
+
with session: NFCTagReaderSession,
|
|
29
|
+
bytes: [NSNumber],
|
|
30
|
+
completion: @escaping RNNfcDataResultBlock
|
|
31
|
+
) {
|
|
32
|
+
guard let connectedTag = session.connectedTag else {
|
|
33
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Not connected"]))
|
|
34
|
+
return
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let mifareTag = extractMifareTag(from: connectedTag)
|
|
38
|
+
guard let mifareTag else {
|
|
39
|
+
completion(nil, NSError(domain: "RNNfcTechSwiftService", code: 2, userInfo: [NSLocalizedDescriptionKey: "not a mifare tag"]))
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let data = RNNfcSwiftUtil.data(from: bytes)
|
|
44
|
+
NSLog("input bytes: %@", RNNfcSwiftUtil.hexString(from: data))
|
|
45
|
+
mifareTag.sendMiFareCommand(commandPacket: data) { response, error in
|
|
46
|
+
if let error {
|
|
47
|
+
completion(nil, error as NSError)
|
|
48
|
+
return
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
completion(RNNfcSwiftUtil.numberArray(from: response), nil)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private static func extractMifareTag(from connectedTag: NFCTag) -> NFCMiFareTag? {
|
|
56
|
+
if case let .miFare(tag) = connectedTag {
|
|
57
|
+
return tag
|
|
58
|
+
}
|
|
59
|
+
return nil
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import CoreNFC
|
|
2
|
+
import Foundation
|
|
3
|
+
|
|
4
|
+
public extension RNNfcManager {
|
|
5
|
+
@objc(getNdefMessageFromTagSession:callback:)
|
|
6
|
+
static func getNdefMessage(
|
|
7
|
+
from tagSession: NFCTagReaderSession?,
|
|
8
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
9
|
+
) {
|
|
10
|
+
guard let ndefTag = requireConnectedNdefTag(from: tagSession) else {
|
|
11
|
+
callback(["No ndef available", NSNull()])
|
|
12
|
+
return
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
ndefTag.readNDEF { ndefMessage, error in
|
|
16
|
+
if let error {
|
|
17
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let converted = ndefMessage.map { convertNdefMessage($0) } ?? []
|
|
22
|
+
callback([NSNull(), ["ndefMessage": converted]])
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@objc(writeNdefMessage:toTagSession:callback:)
|
|
27
|
+
static func writeNdefMessage(
|
|
28
|
+
_ bytes: [NSNumber],
|
|
29
|
+
to tagSession: NFCTagReaderSession?,
|
|
30
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
31
|
+
) {
|
|
32
|
+
guard let ndefTag = requireConnectedNdefTag(from: tagSession) else {
|
|
33
|
+
callback(["No ndef available", NSNull()])
|
|
34
|
+
return
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let data = RNNfcSwiftUtil.data(from: bytes)
|
|
38
|
+
guard let ndefMessage = NFCNDEFMessage(data: data) else {
|
|
39
|
+
callback(["invalid ndef msg"])
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
ndefTag.writeNDEF(ndefMessage) { error in
|
|
44
|
+
if let error {
|
|
45
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
46
|
+
return
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
callback([])
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@objc(makeTagReadOnlyFromTagSession:callback:)
|
|
54
|
+
static func makeTagReadOnly(
|
|
55
|
+
from tagSession: NFCTagReaderSession?,
|
|
56
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
57
|
+
) {
|
|
58
|
+
guard let ndefTag = requireConnectedNdefTag(from: tagSession) else {
|
|
59
|
+
callback(["No ndef available", NSNull()])
|
|
60
|
+
return
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
ndefTag.writeLock { error in
|
|
64
|
+
if let error {
|
|
65
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
66
|
+
return
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
callback([])
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@objc(queryNdefStatusFromTagSession:callback:)
|
|
74
|
+
static func queryNdefStatus(
|
|
75
|
+
from tagSession: NFCTagReaderSession?,
|
|
76
|
+
callback: @escaping RNNfcResponseSenderBlock
|
|
77
|
+
) {
|
|
78
|
+
guard let ndefTag = requireConnectedNdefTag(from: tagSession) else {
|
|
79
|
+
callback(["No ndef available", NSNull()])
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
ndefTag.queryNDEFStatus { status, capacity, error in
|
|
84
|
+
if let error {
|
|
85
|
+
callback([RNNfcSwiftUtil.errorMessage(from: error as NSError), NSNull()])
|
|
86
|
+
return
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
let payload: [String: NSNumber] = [
|
|
90
|
+
"status": NSNumber(value: Int(status.rawValue)),
|
|
91
|
+
"capacity": NSNumber(value: Int(capacity)),
|
|
92
|
+
]
|
|
93
|
+
callback([NSNull(), payload])
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private static func requireConnectedNdefTag(from tagSession: NFCTagReaderSession?) -> NFCNDEFTag? {
|
|
98
|
+
guard let connectedTag = tagSession?.connectedTag else {
|
|
99
|
+
return nil
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return getNdefTagHandle(from: connectedTag)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private static func getNdefTagHandle(from tag: NFCTag) -> NFCNDEFTag? {
|
|
106
|
+
switch tag {
|
|
107
|
+
case .miFare(let mifareTag):
|
|
108
|
+
return mifareTag
|
|
109
|
+
case .iso7816(let iso7816Tag):
|
|
110
|
+
return iso7816Tag
|
|
111
|
+
case .feliCa(let felicaTag):
|
|
112
|
+
return felicaTag
|
|
113
|
+
case .iso15693(let iso15693Tag):
|
|
114
|
+
return iso15693Tag
|
|
115
|
+
@unknown default:
|
|
116
|
+
return nil
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import <CoreNFC/CoreNFC.h>
|
|
3
|
+
|
|
4
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
5
|
+
|
|
6
|
+
typedef void (^RNNfcDataResultBlock)(NSArray<NSNumber *> * _Nullable response, NSError * _Nullable error);
|
|
7
|
+
typedef void (^RNNfcIsoDepResultBlock)(NSArray<NSNumber *> * _Nullable response, NSNumber * _Nullable sw1, NSNumber * _Nullable sw2, NSError * _Nullable error);
|
|
8
|
+
typedef void (^RNNfcIso15693SystemInfoResultBlock)(NSDictionary * _Nullable systemInfo, NSError * _Nullable error);
|
|
9
|
+
typedef void (^RNNfcIso15693BlocksResultBlock)(NSArray * _Nullable blocks, NSError * _Nullable error);
|
|
10
|
+
typedef void (^RNNfcVoidResultBlock)(NSError * _Nullable error);
|
|
11
|
+
typedef void (^RNNfcIso15693SendRequestResultBlock)(NSNumber * _Nullable responseFlag, NSArray<NSNumber *> * _Nullable response, NSError * _Nullable error);
|
|
12
|
+
typedef void (^RNNfcResponseSenderBlock)(NSArray * _Nonnull response);
|
|
13
|
+
|
|
14
|
+
@interface RNNfcManager : NSObject
|
|
15
|
+
|
|
16
|
+
+ (BOOL)isTagSessionSupported;
|
|
17
|
+
+ (BOOL)isIso15693Supported;
|
|
18
|
+
|
|
19
|
+
+ (void)isSupported:(NSString *)tech
|
|
20
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
21
|
+
|
|
22
|
+
+ (void)startWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
23
|
+
|
|
24
|
+
+ (void)resetRuntimeState;
|
|
25
|
+
+ (void)invalidateRuntimeState;
|
|
26
|
+
|
|
27
|
+
+ (NSObject *)createSessionDelegateProxy;
|
|
28
|
+
|
|
29
|
+
+ (BOOL)ensureNoActiveSessionForCallback:(RNNfcResponseSenderBlock)callback;
|
|
30
|
+
|
|
31
|
+
+ (void)createAndBeginTagSessionWithTechs:(NSArray<NSString *> *)techs
|
|
32
|
+
options:(NSDictionary *)options
|
|
33
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
34
|
+
|
|
35
|
+
+ (void)createAndBeginNdefSessionWithOptions:(NSDictionary *)options
|
|
36
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
37
|
+
|
|
38
|
+
+ (NFCTagReaderSession * _Nullable)requireTagSessionRegisteredWithCallback:(RNNfcResponseSenderBlock)callback
|
|
39
|
+
noSessionMessage:(NSString *)noSessionMessage;
|
|
40
|
+
|
|
41
|
+
+ (NFCNDEFReaderSession * _Nullable)requireNdefSessionRegisteredWithCallback:(RNNfcResponseSenderBlock)callback
|
|
42
|
+
noSessionMessage:(NSString *)noSessionMessage;
|
|
43
|
+
|
|
44
|
+
+ (void)invalidateActiveSessionWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
45
|
+
|
|
46
|
+
+ (void)invalidateSessionWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
47
|
+
|
|
48
|
+
+ (void)invalidateActiveSessionWithErrorMessage:(NSString *)errorMessage
|
|
49
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
50
|
+
|
|
51
|
+
+ (void)invalidateSessionWithErrorMessage:(NSString *)errorMessage
|
|
52
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
53
|
+
|
|
54
|
+
+ (void)restartTechnologyRequestWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
55
|
+
|
|
56
|
+
+ (void)cancelTechnologyRequestWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
57
|
+
|
|
58
|
+
+ (void)unregisterTagEventWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
59
|
+
|
|
60
|
+
+ (void)setAlertMessage:(NSString *)alertMessage
|
|
61
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
62
|
+
|
|
63
|
+
+ (void)isSessionAvailableWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
64
|
+
|
|
65
|
+
+ (void)isTagSessionAvailableWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
66
|
+
|
|
67
|
+
+ (void)sendMifareCommand:(NSArray<NSNumber *> *)bytes
|
|
68
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
69
|
+
|
|
70
|
+
+ (void)sendFelicaCommand:(NSArray<NSNumber *> *)bytes
|
|
71
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
72
|
+
|
|
73
|
+
+ (void)sendCommandAPDUBytes:(NSArray<NSNumber *> *)bytes
|
|
74
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
75
|
+
|
|
76
|
+
+ (void)sendCommandAPDU:(NSDictionary *)payload
|
|
77
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
78
|
+
|
|
79
|
+
+ (void)getNdefMessageFromTagSession:(NFCTagReaderSession * _Nullable)tagSession
|
|
80
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
81
|
+
|
|
82
|
+
+ (void)writeNdefMessage:(NSArray<NSNumber *> *)bytes
|
|
83
|
+
toTagSession:(NFCTagReaderSession * _Nullable)tagSession
|
|
84
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
85
|
+
|
|
86
|
+
+ (void)makeTagReadOnlyFromTagSession:(NFCTagReaderSession * _Nullable)tagSession
|
|
87
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
88
|
+
|
|
89
|
+
+ (void)queryNdefStatusFromTagSession:(NFCTagReaderSession * _Nullable)tagSession
|
|
90
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
91
|
+
|
|
92
|
+
+ (NSArray *)convertNdefMessage:(NFCNDEFMessage *)message;
|
|
93
|
+
|
|
94
|
+
+ (void)getTagWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
95
|
+
|
|
96
|
+
+ (void)getTagFromTagSession:(NFCTagReaderSession * _Nullable)tagSession
|
|
97
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
98
|
+
|
|
99
|
+
+ (void)getNdefMessageWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
100
|
+
|
|
101
|
+
+ (void)writeNdefMessage:(NSArray<NSNumber *> *)bytes
|
|
102
|
+
options:(NSDictionary *)options
|
|
103
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
104
|
+
|
|
105
|
+
+ (void)makeReadOnlyWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
106
|
+
|
|
107
|
+
+ (void)queryNdefStatusWithCallback:(RNNfcResponseSenderBlock)callback;
|
|
108
|
+
|
|
109
|
+
+ (void)iso15693GetSystemInfo:(NSNumber *)flags
|
|
110
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
111
|
+
|
|
112
|
+
+ (void)iso15693ReadSingleBlock:(NSDictionary *)options
|
|
113
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
114
|
+
|
|
115
|
+
+ (void)iso15693ReadMultipleBlocks:(NSDictionary *)options
|
|
116
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
117
|
+
|
|
118
|
+
+ (void)iso15693WriteSingleBlock:(NSDictionary *)options
|
|
119
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
120
|
+
|
|
121
|
+
+ (void)iso15693LockBlock:(NSDictionary *)options
|
|
122
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
123
|
+
|
|
124
|
+
+ (void)iso15693WriteAFI:(NSDictionary *)options
|
|
125
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
126
|
+
|
|
127
|
+
+ (void)iso15693LockAFI:(NSDictionary *)options
|
|
128
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
129
|
+
|
|
130
|
+
+ (void)iso15693WriteDSFID:(NSDictionary *)options
|
|
131
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
132
|
+
|
|
133
|
+
+ (void)iso15693LockDSFID:(NSDictionary *)options
|
|
134
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
135
|
+
|
|
136
|
+
+ (void)iso15693ResetToReady:(NSDictionary *)options
|
|
137
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
138
|
+
|
|
139
|
+
+ (void)iso15693Select:(NSDictionary *)options
|
|
140
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
141
|
+
|
|
142
|
+
+ (void)iso15693StayQuiet:(RNNfcResponseSenderBlock)callback;
|
|
143
|
+
|
|
144
|
+
+ (void)iso15693CustomCommand:(NSDictionary *)options
|
|
145
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
146
|
+
|
|
147
|
+
+ (void)iso15693SendRequest:(NSDictionary *)options
|
|
148
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
149
|
+
|
|
150
|
+
+ (void)iso15693ExtendedReadSingleBlock:(NSDictionary *)options
|
|
151
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
152
|
+
|
|
153
|
+
+ (void)iso15693ExtendedReadMultipleBlocks:(NSDictionary *)options
|
|
154
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
155
|
+
|
|
156
|
+
+ (void)iso15693ExtendedWriteSingleBlock:(NSDictionary *)options
|
|
157
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
158
|
+
|
|
159
|
+
+ (void)iso15693ExtendedLockBlock:(NSDictionary *)options
|
|
160
|
+
callback:(RNNfcResponseSenderBlock)callback;
|
|
161
|
+
|
|
162
|
+
+ (void)sendMifareCommandWithSession:(NFCTagReaderSession *)session
|
|
163
|
+
bytes:(NSArray<NSNumber *> *)bytes
|
|
164
|
+
completion:(RNNfcDataResultBlock)completion;
|
|
165
|
+
|
|
166
|
+
+ (void)sendFelicaCommandWithSession:(NFCTagReaderSession *)session
|
|
167
|
+
bytes:(NSArray<NSNumber *> *)bytes
|
|
168
|
+
completion:(RNNfcDataResultBlock)completion;
|
|
169
|
+
|
|
170
|
+
+ (void)sendCommandAPDUBytesWithSession:(NFCTagReaderSession *)session
|
|
171
|
+
bytes:(NSArray<NSNumber *> *)bytes
|
|
172
|
+
completion:(RNNfcIsoDepResultBlock)completion;
|
|
173
|
+
|
|
174
|
+
+ (void)sendCommandAPDUWithSession:(NFCTagReaderSession *)session
|
|
175
|
+
payload:(NSDictionary *)payload
|
|
176
|
+
completion:(RNNfcIsoDepResultBlock)completion;
|
|
177
|
+
|
|
178
|
+
+ (void)iso15693GetSystemInfoWithSession:(NFCTagReaderSession *)session
|
|
179
|
+
flags:(NSNumber *)flags
|
|
180
|
+
completion:(RNNfcIso15693SystemInfoResultBlock)completion;
|
|
181
|
+
|
|
182
|
+
+ (void)iso15693ReadSingleBlockWithSession:(NFCTagReaderSession *)session
|
|
183
|
+
options:(NSDictionary *)options
|
|
184
|
+
completion:(RNNfcDataResultBlock)completion;
|
|
185
|
+
|
|
186
|
+
+ (void)iso15693ReadMultipleBlocksWithSession:(NFCTagReaderSession *)session
|
|
187
|
+
options:(NSDictionary *)options
|
|
188
|
+
completion:(RNNfcIso15693BlocksResultBlock)completion;
|
|
189
|
+
|
|
190
|
+
+ (void)iso15693WriteSingleBlockWithSession:(NFCTagReaderSession *)session
|
|
191
|
+
options:(NSDictionary *)options
|
|
192
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
193
|
+
|
|
194
|
+
+ (void)iso15693LockBlockWithSession:(NFCTagReaderSession *)session
|
|
195
|
+
options:(NSDictionary *)options
|
|
196
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
197
|
+
|
|
198
|
+
+ (void)iso15693WriteAFIWithSession:(NFCTagReaderSession *)session
|
|
199
|
+
options:(NSDictionary *)options
|
|
200
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
201
|
+
|
|
202
|
+
+ (void)iso15693LockAFIWithSession:(NFCTagReaderSession *)session
|
|
203
|
+
options:(NSDictionary *)options
|
|
204
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
205
|
+
|
|
206
|
+
+ (void)iso15693WriteDSFIDWithSession:(NFCTagReaderSession *)session
|
|
207
|
+
options:(NSDictionary *)options
|
|
208
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
209
|
+
|
|
210
|
+
+ (void)iso15693LockDSFIDWithSession:(NFCTagReaderSession *)session
|
|
211
|
+
options:(NSDictionary *)options
|
|
212
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
213
|
+
|
|
214
|
+
+ (void)iso15693ResetToReadyWithSession:(NFCTagReaderSession *)session
|
|
215
|
+
options:(NSDictionary *)options
|
|
216
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
217
|
+
|
|
218
|
+
+ (void)iso15693SelectWithSession:(NFCTagReaderSession *)session
|
|
219
|
+
options:(NSDictionary *)options
|
|
220
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
221
|
+
|
|
222
|
+
+ (void)iso15693StayQuietWithSession:(NFCTagReaderSession *)session
|
|
223
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
224
|
+
|
|
225
|
+
+ (void)iso15693CustomCommandWithSession:(NFCTagReaderSession *)session
|
|
226
|
+
options:(NSDictionary *)options
|
|
227
|
+
completion:(RNNfcDataResultBlock)completion;
|
|
228
|
+
|
|
229
|
+
+ (void)iso15693SendRequestWithSession:(NFCTagReaderSession *)session
|
|
230
|
+
options:(NSDictionary *)options
|
|
231
|
+
completion:(RNNfcIso15693SendRequestResultBlock)completion;
|
|
232
|
+
|
|
233
|
+
+ (void)iso15693ExtendedReadSingleBlockWithSession:(NFCTagReaderSession *)session
|
|
234
|
+
options:(NSDictionary *)options
|
|
235
|
+
completion:(RNNfcDataResultBlock)completion;
|
|
236
|
+
|
|
237
|
+
+ (void)iso15693ExtendedReadMultipleBlocksWithSession:(NFCTagReaderSession *)session
|
|
238
|
+
options:(NSDictionary *)options
|
|
239
|
+
completion:(RNNfcIso15693BlocksResultBlock)completion;
|
|
240
|
+
|
|
241
|
+
+ (void)iso15693ExtendedWriteSingleBlockWithSession:(NFCTagReaderSession *)session
|
|
242
|
+
options:(NSDictionary *)options
|
|
243
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
244
|
+
|
|
245
|
+
+ (void)iso15693ExtendedLockBlockWithSession:(NFCTagReaderSession *)session
|
|
246
|
+
options:(NSDictionary *)options
|
|
247
|
+
completion:(RNNfcVoidResultBlock)completion;
|
|
248
|
+
|
|
249
|
+
@end
|
|
250
|
+
|
|
251
|
+
NS_ASSUME_NONNULL_END
|