@exxili/capacitor-nfc 0.0.2 → 0.0.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.
- package/ExxiliCapacitorNfc.podspec +17 -0
- package/README.md +96 -43
- package/android/build.gradle +11 -2
- package/android/src/main/kotlin/com/exxili/capacitornfc/MainActivity.kt +11 -0
- package/android/src/main/kotlin/com/exxili/capacitornfc/NFCPlugin.kt +315 -0
- package/dist/esm/definitions.d.ts +40 -12
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/index.d.ts +1 -2
- package/dist/esm/index.js +81 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/web.d.ts +14 -0
- package/dist/esm/web.js +31 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +116 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +120 -5
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/NFCPlugin/NFCPlugin.swift +28 -5
- package/ios/Sources/NFCPlugin/NFCReader.swift +1 -0
- package/package.json +2 -2
- package/android/src/main/java/com/exxili/capacitornfc/NFC.java +0 -11
- package/android/src/main/java/com/exxili/capacitornfc/NFCPlugin.java +0 -22
package/dist/plugin.cjs.js
CHANGED
|
@@ -4,7 +4,122 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var core = require('@capacitor/core');
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const NFCPlug = core.registerPlugin('NFC', {
|
|
8
|
+
web: () => Promise.resolve().then(function () { return web; }).then(m => new m.NFCWeb()),
|
|
9
|
+
});
|
|
10
|
+
const NFC = {
|
|
11
|
+
isSupported: NFCPlug.isSupported.bind(NFCPlug),
|
|
12
|
+
startScan: NFCPlug.startScan.bind(NFCPlug),
|
|
13
|
+
cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),
|
|
14
|
+
onRead: (func) => NFC.wrapperListeners.push(func),
|
|
15
|
+
onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),
|
|
16
|
+
onError: (errorFn) => {
|
|
17
|
+
NFCPlug.addListener(`nfcError`, errorFn);
|
|
18
|
+
},
|
|
19
|
+
removeAllListeners: (eventName) => {
|
|
20
|
+
NFC.wrapperListeners = [];
|
|
21
|
+
return NFCPlug.removeAllListeners(eventName);
|
|
22
|
+
},
|
|
23
|
+
wrapperListeners: [],
|
|
24
|
+
async writeNDEF(options) {
|
|
25
|
+
var _a;
|
|
26
|
+
const ndefMessage = {
|
|
27
|
+
records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {
|
|
28
|
+
const payload = typeof record.payload === 'string'
|
|
29
|
+
? Array.from(new TextEncoder().encode(record.payload))
|
|
30
|
+
: Array.isArray(record.payload)
|
|
31
|
+
? record.payload
|
|
32
|
+
: record.payload instanceof Uint8Array
|
|
33
|
+
? Array.from(record.payload)
|
|
34
|
+
: null;
|
|
35
|
+
if (!payload)
|
|
36
|
+
throw 'Unsupported payload type';
|
|
37
|
+
return {
|
|
38
|
+
type: record.type,
|
|
39
|
+
payload,
|
|
40
|
+
};
|
|
41
|
+
})) !== null && _a !== void 0 ? _a : [],
|
|
42
|
+
};
|
|
43
|
+
await NFCPlug.writeNDEF(ndefMessage);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const decodeBase64 = (base64Payload) => {
|
|
47
|
+
return atob(base64Payload)
|
|
48
|
+
.split('')
|
|
49
|
+
.map((char) => char.charCodeAt(0));
|
|
50
|
+
};
|
|
51
|
+
const mapPayloadTo = (type, data) => {
|
|
52
|
+
return {
|
|
53
|
+
messages: data.messages.map(message => ({
|
|
54
|
+
records: message.records.map(record => ({
|
|
55
|
+
type: record.type,
|
|
56
|
+
payload: type === "b64"
|
|
57
|
+
? record.payload
|
|
58
|
+
: type === "string"
|
|
59
|
+
? decodeBase64(record.payload)
|
|
60
|
+
: type === "uint8Array"
|
|
61
|
+
? new Uint8Array(decodeBase64(record.payload))
|
|
62
|
+
: type === "numberArray"
|
|
63
|
+
? Array.from(decodeBase64(record.payload))
|
|
64
|
+
: record.payload
|
|
65
|
+
}))
|
|
66
|
+
}))
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
NFCPlug.addListener(`nfcTag`, data => {
|
|
70
|
+
const wrappedData = {
|
|
71
|
+
base64() {
|
|
72
|
+
return mapPayloadTo("b64", data);
|
|
73
|
+
},
|
|
74
|
+
string() {
|
|
75
|
+
return mapPayloadTo("string", data);
|
|
76
|
+
},
|
|
77
|
+
uint8Array() {
|
|
78
|
+
return mapPayloadTo("uint8Array", data);
|
|
79
|
+
},
|
|
80
|
+
numberArray() {
|
|
81
|
+
return mapPayloadTo("numberArray", data);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
for (const listener of NFC.wrapperListeners) {
|
|
85
|
+
listener(wrappedData);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
class NFCWeb extends core.WebPlugin {
|
|
90
|
+
constructor() {
|
|
91
|
+
super(...arguments);
|
|
92
|
+
this.wrapperListeners = [];
|
|
93
|
+
}
|
|
94
|
+
isSupported() {
|
|
95
|
+
return Promise.resolve({ supported: false });
|
|
96
|
+
}
|
|
97
|
+
startScan() {
|
|
98
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
99
|
+
}
|
|
100
|
+
cancelWriteAndroid() {
|
|
101
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
102
|
+
}
|
|
103
|
+
writeNDEF() {
|
|
104
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
105
|
+
}
|
|
106
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
107
|
+
onRead(_func) {
|
|
108
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
109
|
+
}
|
|
110
|
+
onWrite() {
|
|
111
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
112
|
+
}
|
|
113
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
114
|
+
onError(_errorFn) {
|
|
115
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
120
|
+
__proto__: null,
|
|
121
|
+
NFCWeb: NFCWeb
|
|
122
|
+
});
|
|
8
123
|
|
|
9
124
|
exports.NFC = NFC;
|
|
10
125
|
//# sourceMappingURL=plugin.cjs.js.map
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst NFCPlug = registerPlugin('NFC', {\n web: () => import('./web').then(m => new m.NFCWeb()),\n});\nexport * from './definitions';\nexport const NFC = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: NFCPlug.startScan.bind(NFCPlug),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => NFC.wrapperListeners.push(func),\n onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),\n onError: (errorFn) => {\n NFCPlug.addListener(`nfcError`, errorFn);\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n const ndefMessage = {\n records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {\n const payload = typeof record.payload === 'string'\n ? Array.from(new TextEncoder().encode(record.payload))\n : Array.isArray(record.payload)\n ? record.payload\n : record.payload instanceof Uint8Array\n ? Array.from(record.payload)\n : null;\n if (!payload)\n throw 'Unsupported payload type';\n return {\n type: record.type,\n payload,\n };\n })) !== null && _a !== void 0 ? _a : [],\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\nconst decodeBase64 = (base64Payload) => {\n return atob(base64Payload)\n .split('')\n .map((char) => char.charCodeAt(0));\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map(message => ({\n records: message.records.map(record => ({\n type: record.type,\n payload: type === \"b64\"\n ? record.payload\n : type === \"string\"\n ? decodeBase64(record.payload)\n : type === \"uint8Array\"\n ? new Uint8Array(decodeBase64(record.payload))\n : type === \"numberArray\"\n ? Array.from(decodeBase64(record.payload))\n : record.payload\n }))\n }))\n };\n};\nNFCPlug.addListener(`nfcTag`, data => {\n const wrappedData = {\n base64() {\n return mapPayloadTo(\"b64\", data);\n },\n string() {\n return mapPayloadTo(\"string\", data);\n },\n uint8Array() {\n return mapPayloadTo(\"uint8Array\", data);\n },\n numberArray() {\n return mapPayloadTo(\"numberArray\", data);\n }\n };\n for (const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class NFCWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.wrapperListeners = [];\n }\n isSupported() {\n return Promise.resolve({ supported: false });\n }\n startScan() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n cancelWriteAndroid() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n writeNDEF() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onRead(_func) {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n onWrite() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onError(_errorFn) {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,13 +1,128 @@
|
|
|
1
1
|
var capacitorNFC = (function (exports, core) {
|
|
2
|
-
|
|
2
|
+
'use strict';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
const NFCPlug = core.registerPlugin('NFC', {
|
|
5
|
+
web: () => Promise.resolve().then(function () { return web; }).then(m => new m.NFCWeb()),
|
|
6
|
+
});
|
|
7
|
+
const NFC = {
|
|
8
|
+
isSupported: NFCPlug.isSupported.bind(NFCPlug),
|
|
9
|
+
startScan: NFCPlug.startScan.bind(NFCPlug),
|
|
10
|
+
cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),
|
|
11
|
+
onRead: (func) => NFC.wrapperListeners.push(func),
|
|
12
|
+
onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),
|
|
13
|
+
onError: (errorFn) => {
|
|
14
|
+
NFCPlug.addListener(`nfcError`, errorFn);
|
|
15
|
+
},
|
|
16
|
+
removeAllListeners: (eventName) => {
|
|
17
|
+
NFC.wrapperListeners = [];
|
|
18
|
+
return NFCPlug.removeAllListeners(eventName);
|
|
19
|
+
},
|
|
20
|
+
wrapperListeners: [],
|
|
21
|
+
async writeNDEF(options) {
|
|
22
|
+
var _a;
|
|
23
|
+
const ndefMessage = {
|
|
24
|
+
records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {
|
|
25
|
+
const payload = typeof record.payload === 'string'
|
|
26
|
+
? Array.from(new TextEncoder().encode(record.payload))
|
|
27
|
+
: Array.isArray(record.payload)
|
|
28
|
+
? record.payload
|
|
29
|
+
: record.payload instanceof Uint8Array
|
|
30
|
+
? Array.from(record.payload)
|
|
31
|
+
: null;
|
|
32
|
+
if (!payload)
|
|
33
|
+
throw 'Unsupported payload type';
|
|
34
|
+
return {
|
|
35
|
+
type: record.type,
|
|
36
|
+
payload,
|
|
37
|
+
};
|
|
38
|
+
})) !== null && _a !== void 0 ? _a : [],
|
|
39
|
+
};
|
|
40
|
+
await NFCPlug.writeNDEF(ndefMessage);
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const decodeBase64 = (base64Payload) => {
|
|
44
|
+
return atob(base64Payload)
|
|
45
|
+
.split('')
|
|
46
|
+
.map((char) => char.charCodeAt(0));
|
|
47
|
+
};
|
|
48
|
+
const mapPayloadTo = (type, data) => {
|
|
49
|
+
return {
|
|
50
|
+
messages: data.messages.map(message => ({
|
|
51
|
+
records: message.records.map(record => ({
|
|
52
|
+
type: record.type,
|
|
53
|
+
payload: type === "b64"
|
|
54
|
+
? record.payload
|
|
55
|
+
: type === "string"
|
|
56
|
+
? decodeBase64(record.payload)
|
|
57
|
+
: type === "uint8Array"
|
|
58
|
+
? new Uint8Array(decodeBase64(record.payload))
|
|
59
|
+
: type === "numberArray"
|
|
60
|
+
? Array.from(decodeBase64(record.payload))
|
|
61
|
+
: record.payload
|
|
62
|
+
}))
|
|
63
|
+
}))
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
NFCPlug.addListener(`nfcTag`, data => {
|
|
67
|
+
const wrappedData = {
|
|
68
|
+
base64() {
|
|
69
|
+
return mapPayloadTo("b64", data);
|
|
70
|
+
},
|
|
71
|
+
string() {
|
|
72
|
+
return mapPayloadTo("string", data);
|
|
73
|
+
},
|
|
74
|
+
uint8Array() {
|
|
75
|
+
return mapPayloadTo("uint8Array", data);
|
|
76
|
+
},
|
|
77
|
+
numberArray() {
|
|
78
|
+
return mapPayloadTo("numberArray", data);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
for (const listener of NFC.wrapperListeners) {
|
|
82
|
+
listener(wrappedData);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
5
85
|
|
|
6
|
-
|
|
86
|
+
class NFCWeb extends core.WebPlugin {
|
|
87
|
+
constructor() {
|
|
88
|
+
super(...arguments);
|
|
89
|
+
this.wrapperListeners = [];
|
|
90
|
+
}
|
|
91
|
+
isSupported() {
|
|
92
|
+
return Promise.resolve({ supported: false });
|
|
93
|
+
}
|
|
94
|
+
startScan() {
|
|
95
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
96
|
+
}
|
|
97
|
+
cancelWriteAndroid() {
|
|
98
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
99
|
+
}
|
|
100
|
+
writeNDEF() {
|
|
101
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
102
|
+
}
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
104
|
+
onRead(_func) {
|
|
105
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
106
|
+
}
|
|
107
|
+
onWrite() {
|
|
108
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
109
|
+
}
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
111
|
+
onError(_errorFn) {
|
|
112
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
7
115
|
|
|
8
|
-
|
|
116
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
117
|
+
__proto__: null,
|
|
118
|
+
NFCWeb: NFCWeb
|
|
119
|
+
});
|
|
9
120
|
|
|
10
|
-
|
|
121
|
+
exports.NFC = NFC;
|
|
122
|
+
|
|
123
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
124
|
+
|
|
125
|
+
return exports;
|
|
11
126
|
|
|
12
127
|
})({}, capacitorExports);
|
|
13
128
|
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst NFCPlug = registerPlugin('NFC', {\n web: () => import('./web').then(m => new m.NFCWeb()),\n});\nexport * from './definitions';\nexport const NFC = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: NFCPlug.startScan.bind(NFCPlug),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => NFC.wrapperListeners.push(func),\n onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),\n onError: (errorFn) => {\n NFCPlug.addListener(`nfcError`, errorFn);\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n const ndefMessage = {\n records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {\n const payload = typeof record.payload === 'string'\n ? Array.from(new TextEncoder().encode(record.payload))\n : Array.isArray(record.payload)\n ? record.payload\n : record.payload instanceof Uint8Array\n ? Array.from(record.payload)\n : null;\n if (!payload)\n throw 'Unsupported payload type';\n return {\n type: record.type,\n payload,\n };\n })) !== null && _a !== void 0 ? _a : [],\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\nconst decodeBase64 = (base64Payload) => {\n return atob(base64Payload)\n .split('')\n .map((char) => char.charCodeAt(0));\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map(message => ({\n records: message.records.map(record => ({\n type: record.type,\n payload: type === \"b64\"\n ? record.payload\n : type === \"string\"\n ? decodeBase64(record.payload)\n : type === \"uint8Array\"\n ? new Uint8Array(decodeBase64(record.payload))\n : type === \"numberArray\"\n ? Array.from(decodeBase64(record.payload))\n : record.payload\n }))\n }))\n };\n};\nNFCPlug.addListener(`nfcTag`, data => {\n const wrappedData = {\n base64() {\n return mapPayloadTo(\"b64\", data);\n },\n string() {\n return mapPayloadTo(\"string\", data);\n },\n uint8Array() {\n return mapPayloadTo(\"uint8Array\", data);\n },\n numberArray() {\n return mapPayloadTo(\"numberArray\", data);\n }\n };\n for (const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class NFCWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.wrapperListeners = [];\n }\n isSupported() {\n return Promise.resolve({ supported: false });\n }\n startScan() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n cancelWriteAndroid() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n writeNDEF() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onRead(_func) {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n onWrite() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onError(_errorFn) {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
7
7
|
public let identifier = "NFCPlugin"
|
|
8
8
|
public let jsName = "NFC"
|
|
9
9
|
public let pluginMethods: [CAPPluginMethod] = [
|
|
10
|
+
CAPPluginMethod(name: "isSupported", returnType: CAPPluginReturnPromise),
|
|
11
|
+
CAPPluginMethod(name: "cancelWriteAndroid", returnType: CAPPluginReturnPromise),
|
|
10
12
|
CAPPluginMethod(name: "startScan", returnType: CAPPluginReturnPromise),
|
|
11
13
|
CAPPluginMethod(name: "writeNDEF", returnType: CAPPluginReturnPromise)
|
|
12
14
|
]
|
|
@@ -14,6 +16,14 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
14
16
|
private let reader = NFCReader()
|
|
15
17
|
private let writer = NFCWriter()
|
|
16
18
|
|
|
19
|
+
@objc func isSupported(_ call: CAPPluginCall) {
|
|
20
|
+
call.resolve(["supported": NFCNDEFReaderSession.readingAvailable])
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@objc func cancelWriteAndroid(_ call: CAPPluginCall) {
|
|
24
|
+
call.reject("Function not implemented for iOS")
|
|
25
|
+
}
|
|
26
|
+
|
|
17
27
|
@objc func startScan(_ call: CAPPluginCall) {
|
|
18
28
|
print("startScan called")
|
|
19
29
|
reader.onNDEFMessageReceived = { messages in
|
|
@@ -22,10 +32,11 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
22
32
|
var records = [[String: Any]]()
|
|
23
33
|
for record in message.records {
|
|
24
34
|
let recordType = String(data: record.type, encoding: .utf8) ?? ""
|
|
25
|
-
let
|
|
35
|
+
let payloadData = record.payload.base64EncodedString()
|
|
36
|
+
|
|
26
37
|
records.append([
|
|
27
38
|
"type": recordType,
|
|
28
|
-
"payload":
|
|
39
|
+
"payload": payloadData
|
|
29
40
|
])
|
|
30
41
|
}
|
|
31
42
|
ndefMessages.append([
|
|
@@ -58,11 +69,23 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
58
69
|
var ndefRecords = [NFCNDEFPayload]()
|
|
59
70
|
for recordData in recordsData {
|
|
60
71
|
guard let type = recordData["type"] as? String,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
72
|
+
let payload = recordData["payload"] as? [NSNumber],
|
|
73
|
+
let typeData = type.data(using: .utf8)
|
|
74
|
+
else {
|
|
75
|
+
print("Skipping record due to missing or invalid record")
|
|
64
76
|
continue
|
|
65
77
|
}
|
|
78
|
+
|
|
79
|
+
guard let payloadArray = payload as [NSNumber]? else {
|
|
80
|
+
print("Skipping record due to missing or invalid 'payload' (expected array of numbers)")
|
|
81
|
+
continue
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
var payloadBytes = [UInt8]()
|
|
85
|
+
for number in payloadArray {
|
|
86
|
+
payloadBytes.append(number.uint8Value)
|
|
87
|
+
}
|
|
88
|
+
let payloadData = Data(payloadBytes)
|
|
66
89
|
|
|
67
90
|
let ndefRecord = NFCNDEFPayload(
|
|
68
91
|
format: .nfcWellKnown,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exxili/capacitor-nfc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"description": "A Capacitor plugin for reading and writing NFC NDEFtags.",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"ios/Sources",
|
|
14
14
|
"ios/Tests",
|
|
15
15
|
"Package.swift",
|
|
16
|
-
"
|
|
16
|
+
"ExxiliCapacitorNfc.podspec"
|
|
17
17
|
],
|
|
18
18
|
"author": "Exxili",
|
|
19
19
|
"license": "MIT",
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
package com.exxili.capacitornfc;
|
|
2
|
-
|
|
3
|
-
import com.getcapacitor.JSObject;
|
|
4
|
-
import com.getcapacitor.Plugin;
|
|
5
|
-
import com.getcapacitor.PluginCall;
|
|
6
|
-
import com.getcapacitor.PluginMethod;
|
|
7
|
-
import com.getcapacitor.annotation.CapacitorPlugin;
|
|
8
|
-
|
|
9
|
-
@CapacitorPlugin(name = "NFC")
|
|
10
|
-
public class NFCPlugin extends Plugin {
|
|
11
|
-
|
|
12
|
-
private NFC implementation = new NFC();
|
|
13
|
-
|
|
14
|
-
@PluginMethod
|
|
15
|
-
public void echo(PluginCall call) {
|
|
16
|
-
String value = call.getString("value");
|
|
17
|
-
|
|
18
|
-
JSObject ret = new JSObject();
|
|
19
|
-
ret.put("value", implementation.echo(value));
|
|
20
|
-
call.resolve(ret);
|
|
21
|
-
}
|
|
22
|
-
}
|