@exxili/capacitor-nfc 0.0.3 → 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/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 +1 -1
- package/android/src/main/java/com/exxili/capacitornfc/NFC.java +0 -11
- package/android/src/main/java/com/exxili/capacitornfc/NFCPlugin.java +0 -22
|
@@ -1,20 +1,34 @@
|
|
|
1
|
-
import { PluginListenerHandle } from '@capacitor/core';
|
|
2
|
-
export
|
|
1
|
+
import type { PluginListenerHandle } from '@capacitor/core';
|
|
2
|
+
export declare type PayloadType = string | number[] | Uint8Array;
|
|
3
|
+
export interface NFCPluginBasic {
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
+
* Checks if NFC is supported on the device. Returns true on all iOS devices, and checks for support on Android.
|
|
5
6
|
*/
|
|
7
|
+
isSupported(): Promise<{
|
|
8
|
+
supported: boolean;
|
|
9
|
+
}>;
|
|
6
10
|
startScan(): Promise<void>;
|
|
7
11
|
/**
|
|
8
12
|
* Writes an NDEF message to an NFC tag.
|
|
9
13
|
* @param options The NDEF message to write.
|
|
10
14
|
*/
|
|
11
|
-
writeNDEF(options: NDEFWriteOptions): Promise<void>;
|
|
15
|
+
writeNDEF<T extends PayloadType = number[]>(options: NDEFWriteOptions<T>): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Cancels writeNDEF on Android (exits "write mode").
|
|
18
|
+
*/
|
|
19
|
+
cancelWriteAndroid(): Promise<void>;
|
|
12
20
|
/**
|
|
13
21
|
* Adds a listener for NFC tag detection events.
|
|
14
22
|
* @param eventName The name of the event ('nfcTag').
|
|
15
23
|
* @param listenerFunc The function to call when an NFC tag is detected.
|
|
16
24
|
*/
|
|
17
25
|
addListener(eventName: 'nfcTag', listenerFunc: (data: NDEFMessages) => void): Promise<PluginListenerHandle> & PluginListenerHandle;
|
|
26
|
+
/**
|
|
27
|
+
* Adds a listener for NFC tag write events.
|
|
28
|
+
* @param eventName The name of the event ('nfcWriteSuccess').
|
|
29
|
+
* @param listenerFunc The function to call when an NFC tag is written.
|
|
30
|
+
*/
|
|
31
|
+
addListener(eventName: 'nfcWriteSuccess', listenerFunc: () => void): Promise<PluginListenerHandle> & PluginListenerHandle;
|
|
18
32
|
/**
|
|
19
33
|
* Adds a listener for NFC error events.
|
|
20
34
|
* @param eventName The name of the event ('nfcError').
|
|
@@ -27,13 +41,13 @@ export interface NFCPlugin {
|
|
|
27
41
|
*/
|
|
28
42
|
removeAllListeners(eventName: 'nfcTag' | 'nfcError'): Promise<void>;
|
|
29
43
|
}
|
|
30
|
-
export interface NDEFMessages {
|
|
31
|
-
messages: NDEFMessage[];
|
|
44
|
+
export interface NDEFMessages<T extends PayloadType = string> {
|
|
45
|
+
messages: NDEFMessage<T>[];
|
|
32
46
|
}
|
|
33
|
-
export interface NDEFMessage {
|
|
34
|
-
records: NDEFRecord[];
|
|
47
|
+
export interface NDEFMessage<T extends PayloadType = string> {
|
|
48
|
+
records: NDEFRecord<T>[];
|
|
35
49
|
}
|
|
36
|
-
export interface NDEFRecord {
|
|
50
|
+
export interface NDEFRecord<T extends PayloadType = string> {
|
|
37
51
|
/**
|
|
38
52
|
* The type of the record.
|
|
39
53
|
*/
|
|
@@ -41,7 +55,7 @@ export interface NDEFRecord {
|
|
|
41
55
|
/**
|
|
42
56
|
* The payload of the record.
|
|
43
57
|
*/
|
|
44
|
-
payload:
|
|
58
|
+
payload: T;
|
|
45
59
|
}
|
|
46
60
|
export interface NFCError {
|
|
47
61
|
/**
|
|
@@ -49,6 +63,20 @@ export interface NFCError {
|
|
|
49
63
|
*/
|
|
50
64
|
error: string;
|
|
51
65
|
}
|
|
52
|
-
export interface NDEFWriteOptions {
|
|
53
|
-
records: NDEFRecord[];
|
|
66
|
+
export interface NDEFWriteOptions<T extends PayloadType = Uint8Array> {
|
|
67
|
+
records: NDEFRecord<T>[];
|
|
68
|
+
}
|
|
69
|
+
export declare type NDEFMessagesTransformable = {
|
|
70
|
+
base64: () => NDEFMessages;
|
|
71
|
+
uint8Array: () => NDEFMessages<Uint8Array>;
|
|
72
|
+
string: () => NDEFMessages;
|
|
73
|
+
numberArray: () => NDEFMessages<number[]>;
|
|
74
|
+
};
|
|
75
|
+
export declare type TagResultListenerFunc = (data: NDEFMessagesTransformable) => void;
|
|
76
|
+
export interface NFCPlugin extends Omit<NFCPluginBasic, "writeNDEF" | "addListener"> {
|
|
77
|
+
writeNDEF: <T extends PayloadType = Uint8Array>(record?: NDEFWriteOptions<T>) => Promise<void>;
|
|
78
|
+
wrapperListeners: TagResultListenerFunc[];
|
|
79
|
+
onRead: (listenerFunc: TagResultListenerFunc) => void;
|
|
80
|
+
onWrite: (listenerFunc: () => void) => void;
|
|
81
|
+
onError: (listenerFunc: (error: NFCError) => void) => void;
|
|
54
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import { PluginListenerHandle } from '@capacitor/core';\n\nexport interface
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\n\n// Payload from a new NFC scan is a base64 encoded string\nexport type PayloadType = string | number[] | Uint8Array\n\nexport interface NFCPluginBasic {\n /**\n * Checks if NFC is supported on the device. Returns true on all iOS devices, and checks for support on Android.\n */\n isSupported(): Promise<{ supported: boolean }>;\n\n startScan(): Promise<void>;\n\n /**\n * Writes an NDEF message to an NFC tag.\n * @param options The NDEF message to write.\n */\n writeNDEF<T extends PayloadType = number[]>(options: NDEFWriteOptions<T>): Promise<void>;\n\n /**\n * Cancels writeNDEF on Android (exits \"write mode\").\n */\n cancelWriteAndroid(): Promise<void>;\n\n /**\n * Adds a listener for NFC tag detection events.\n * @param eventName The name of the event ('nfcTag').\n * @param listenerFunc The function to call when an NFC tag is detected.\n */\n addListener(\n eventName: 'nfcTag',\n listenerFunc: (data: NDEFMessages) => void,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n\n /**\n * Adds a listener for NFC tag write events.\n * @param eventName The name of the event ('nfcWriteSuccess').\n * @param listenerFunc The function to call when an NFC tag is written.\n */\n addListener(\n eventName: 'nfcWriteSuccess',\n listenerFunc: ()=> void,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n\n /**\n * Adds a listener for NFC error events.\n * @param eventName The name of the event ('nfcError').\n * @param listenerFunc The function to call when an NFC error occurs.\n */\n addListener(\n eventName: 'nfcError',\n listenerFunc: (error: NFCError) => void,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n\n /**\n * Removes all listeners for the specified event.\n * @param eventName The name of the event.\n */\n removeAllListeners(eventName: 'nfcTag' | 'nfcError'): Promise<void>;\n}\n\nexport interface NDEFMessages<T extends PayloadType = string> {\n messages: NDEFMessage<T>[];\n}\n\nexport interface NDEFMessage<T extends PayloadType = string> {\n records: NDEFRecord<T>[];\n}\n\nexport interface NDEFRecord<T extends PayloadType = string> {\n /**\n * The type of the record.\n */\n type: string;\n\n /**\n * The payload of the record.\n */\n payload: T;\n}\n\n\nexport interface NFCError {\n /**\n * The error message.\n */\n error: string;\n}\n\nexport interface NDEFWriteOptions<T extends PayloadType = Uint8Array> {\n records: NDEFRecord<T>[];\n}\n\nexport type NDEFMessagesTransformable = {\n base64: ()=> NDEFMessages;\n uint8Array: ()=> NDEFMessages<Uint8Array>;\n string: ()=> NDEFMessages;\n numberArray: ()=> NDEFMessages<number[]>;\n}\n\nexport type TagResultListenerFunc = (data: NDEFMessagesTransformable) => void\n\nexport interface NFCPlugin extends Omit<NFCPluginBasic, \"writeNDEF\" | \"addListener\"> {\n writeNDEF: <T extends PayloadType = Uint8Array>(record?: NDEFWriteOptions<T>) => Promise<void>;\n wrapperListeners: TagResultListenerFunc[],\n onRead: (listenerFunc: TagResultListenerFunc)=> void,\n onWrite: (listenerFunc: ()=> void) => void,\n onError: (listenerFunc: (error: NFCError)=> void)=> void,\n}"]}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,84 @@
|
|
|
1
1
|
import { registerPlugin } from '@capacitor/core';
|
|
2
|
-
const
|
|
2
|
+
const NFCPlug = registerPlugin('NFC', {
|
|
3
|
+
web: () => import('./web').then(m => new m.NFCWeb()),
|
|
4
|
+
});
|
|
3
5
|
export * from './definitions';
|
|
4
|
-
export
|
|
6
|
+
export const NFC = {
|
|
7
|
+
isSupported: NFCPlug.isSupported.bind(NFCPlug),
|
|
8
|
+
startScan: NFCPlug.startScan.bind(NFCPlug),
|
|
9
|
+
cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),
|
|
10
|
+
onRead: (func) => NFC.wrapperListeners.push(func),
|
|
11
|
+
onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),
|
|
12
|
+
onError: (errorFn) => {
|
|
13
|
+
NFCPlug.addListener(`nfcError`, errorFn);
|
|
14
|
+
},
|
|
15
|
+
removeAllListeners: (eventName) => {
|
|
16
|
+
NFC.wrapperListeners = [];
|
|
17
|
+
return NFCPlug.removeAllListeners(eventName);
|
|
18
|
+
},
|
|
19
|
+
wrapperListeners: [],
|
|
20
|
+
async writeNDEF(options) {
|
|
21
|
+
var _a;
|
|
22
|
+
const ndefMessage = {
|
|
23
|
+
records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {
|
|
24
|
+
const payload = typeof record.payload === 'string'
|
|
25
|
+
? Array.from(new TextEncoder().encode(record.payload))
|
|
26
|
+
: Array.isArray(record.payload)
|
|
27
|
+
? record.payload
|
|
28
|
+
: record.payload instanceof Uint8Array
|
|
29
|
+
? Array.from(record.payload)
|
|
30
|
+
: null;
|
|
31
|
+
if (!payload)
|
|
32
|
+
throw 'Unsupported payload type';
|
|
33
|
+
return {
|
|
34
|
+
type: record.type,
|
|
35
|
+
payload,
|
|
36
|
+
};
|
|
37
|
+
})) !== null && _a !== void 0 ? _a : [],
|
|
38
|
+
};
|
|
39
|
+
await NFCPlug.writeNDEF(ndefMessage);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
const decodeBase64 = (base64Payload) => {
|
|
43
|
+
return atob(base64Payload)
|
|
44
|
+
.split('')
|
|
45
|
+
.map((char) => char.charCodeAt(0));
|
|
46
|
+
};
|
|
47
|
+
const mapPayloadTo = (type, data) => {
|
|
48
|
+
return {
|
|
49
|
+
messages: data.messages.map(message => ({
|
|
50
|
+
records: message.records.map(record => ({
|
|
51
|
+
type: record.type,
|
|
52
|
+
payload: type === "b64"
|
|
53
|
+
? record.payload
|
|
54
|
+
: type === "string"
|
|
55
|
+
? decodeBase64(record.payload)
|
|
56
|
+
: type === "uint8Array"
|
|
57
|
+
? new Uint8Array(decodeBase64(record.payload))
|
|
58
|
+
: type === "numberArray"
|
|
59
|
+
? Array.from(decodeBase64(record.payload))
|
|
60
|
+
: record.payload
|
|
61
|
+
}))
|
|
62
|
+
}))
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
NFCPlug.addListener(`nfcTag`, data => {
|
|
66
|
+
const wrappedData = {
|
|
67
|
+
base64() {
|
|
68
|
+
return mapPayloadTo("b64", data);
|
|
69
|
+
},
|
|
70
|
+
string() {
|
|
71
|
+
return mapPayloadTo("string", data);
|
|
72
|
+
},
|
|
73
|
+
uint8Array() {
|
|
74
|
+
return mapPayloadTo("uint8Array", data);
|
|
75
|
+
},
|
|
76
|
+
numberArray() {
|
|
77
|
+
return mapPayloadTo("numberArray", data);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
for (const listener of NFC.wrapperListeners) {
|
|
81
|
+
listener(wrappedData);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
5
84
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { registerPlugin } from '@capacitor/core';\n\nimport type {\n NDEFMessagesTransformable,\n NDEFWriteOptions,\n NFCPlugin,\n NFCPluginBasic,\n PayloadType,\n TagResultListenerFunc,\n NFCError,\n NDEFMessages\n} from './definitions';\n\nconst NFCPlug = registerPlugin<NFCPluginBasic>('NFC', {\n web: () => import('./web').then(m => new m.NFCWeb()),\n});\nexport * from './definitions';\nexport const NFC: NFCPlugin = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: NFCPlug.startScan.bind(NFCPlug),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func: TagResultListenerFunc) => NFC.wrapperListeners.push(func),\n onWrite: (func: ()=> void) => NFCPlug.addListener(`nfcWriteSuccess`, func),\n onError: (errorFn: (error: NFCError) => void) => {\n NFCPlug.addListener(`nfcError`, errorFn);\n },\n removeAllListeners: (eventName: 'nfcTag' | 'nfcError') => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n\n async writeNDEF<T extends PayloadType = Uint8Array>(options?: NDEFWriteOptions<T>): Promise<void> {\n const ndefMessage: NDEFWriteOptions<number[]> = {\n records:\n options?.records.map((record) => {\n const payload: number[] | null =\n 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\n if (!payload) throw 'Unsupported payload type';\n\n return {\n type: record.type,\n payload,\n };\n }) ?? [],\n };\n\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\n\ntype DecodeSpecifier = \"b64\" | \"string\" | \"uint8Array\" | \"numberArray\";\ntype decodedType<T extends DecodeSpecifier> = NDEFMessages<T extends \"b64\" ? string : T extends \"string\" ? string : T extends \"uint8Array\" ? Uint8Array : number[]>\nconst decodeBase64 = (base64Payload: string)=> {\n return atob(base64Payload)\n .split('')\n .map((char) => char.charCodeAt(0));\n}\nconst mapPayloadTo = <T extends DecodeSpecifier>(type: T, data: NDEFMessages): decodedType<T> => {\n return {\n messages: data.messages.map(message => ({\n records: message.records.map(record => ({\n type: record.type,\n payload:\n 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 } as decodedType<T>\n}\n\nNFCPlug.addListener(`nfcTag`, data=> {\n const wrappedData: NDEFMessagesTransformable = {\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\n for(const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n})"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { WebPlugin } from '@capacitor/core';
|
|
2
|
+
import type { NFCPlugin, TagResultListenerFunc } from './definitions';
|
|
3
|
+
export declare class NFCWeb extends WebPlugin implements NFCPlugin {
|
|
4
|
+
wrapperListeners: never[];
|
|
5
|
+
isSupported(): Promise<{
|
|
6
|
+
supported: boolean;
|
|
7
|
+
}>;
|
|
8
|
+
startScan(): Promise<void>;
|
|
9
|
+
cancelWriteAndroid(): Promise<void>;
|
|
10
|
+
writeNDEF(): Promise<void>;
|
|
11
|
+
onRead(_func: TagResultListenerFunc): Promise<void>;
|
|
12
|
+
onWrite(): Promise<void>;
|
|
13
|
+
onError(_errorFn: (error: any) => void): Promise<void>;
|
|
14
|
+
}
|
package/dist/esm/web.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { WebPlugin } from '@capacitor/core';
|
|
2
|
+
export class NFCWeb extends WebPlugin {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.wrapperListeners = [];
|
|
6
|
+
}
|
|
7
|
+
isSupported() {
|
|
8
|
+
return Promise.resolve({ supported: false });
|
|
9
|
+
}
|
|
10
|
+
startScan() {
|
|
11
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
12
|
+
}
|
|
13
|
+
cancelWriteAndroid() {
|
|
14
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
15
|
+
}
|
|
16
|
+
writeNDEF() {
|
|
17
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
18
|
+
}
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
20
|
+
onRead(_func) {
|
|
21
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
22
|
+
}
|
|
23
|
+
onWrite() {
|
|
24
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
25
|
+
}
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
27
|
+
onError(_errorFn) {
|
|
28
|
+
return Promise.reject(new Error('NFC is not supported on web'));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,OAAO,MAAO,SAAQ,SAAS;IAArC;;QACE,qBAAgB,GAAG,EAAE,CAAC;IA+BxB,CAAC;IA7BC,WAAW;QACT,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS;QACP,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,kBAAkB;QAChB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,SAAS;QACP,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAAC,KAA4B;QACjC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,6DAA6D;IAC7D,OAAO,CAAC,QAA8B;QACpC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAClE,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport type { NFCPlugin, TagResultListenerFunc } from './definitions';\n\nexport class NFCWeb extends WebPlugin implements NFCPlugin {\n wrapperListeners = [];\n \n isSupported(): Promise<{ supported: boolean }> {\n return Promise.resolve({ supported: false });\n }\n\n startScan(): Promise<void> {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n\n cancelWriteAndroid(): Promise<void> {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n\n writeNDEF(): Promise<void> {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onRead(_func: TagResultListenerFunc): Promise<void> {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n\n onWrite(): Promise<void> {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onError(_errorFn: (error: any) => void): Promise<void> {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n}"]}
|
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,
|