diff --git a/README.md b/README.md index 1efe0ed..7f62e6e 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ npx cap sync * [`signTextDNIe(...)`](#signtextdnie) * [`signDocumentDNIe(...)`](#signdocumentdnie) * [`signHashDNIe(...)`](#signhashdnie) +* [`isNFCEnable()`](#isnfcenable) * [Interfaces](#interfaces) @@ -68,9 +69,9 @@ readPassport(options: { accessKey: String; paceKeyReference: number; tags: Strin Lee el eID utilizando la conexión NFC. -| Param | Type | Description | -| ------------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`options`** | { accessKey: String; paceKeyReference: number; tags: String[]; } | - Array que incluye los parámetros que se le envían al plugin: accessKey (Indica el can o mrz utilizado para establecer la comunicación), paceKeyReference (indica el tipo de clave usada en la conexión, se puede utilizar CAN o MRZ), tags (indica los dataGroups a leer del documento. [] para leer todos) | +| Param | Type | Description | +| ------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`options`** | { accessKey: String; paceKeyReference: number; tags: String[]; } | - Array que incluye los parámetros que se le envían al plugin: accessKey (Indica el can o mrz utilizado para establecer la comunicación), paceKeyReference (indica el tipo de clave usada en la conexión, se puede utilizar CAN o MRZ), tags (indica los dataGroups a leer del documento. [] para leer todos. En android si no se especifica DG2 no se recupera la foto y si no se especifica DG7 no se recupera la firma, el resto de DGs se recuperan siempre) | **Returns:** Promise<RespuestaReadPassport> @@ -128,6 +129,19 @@ Firma el hash pasado como parámetro con el certificado del DNIe pasado como par -------------------- +### isNFCEnable() + +```typescript +isNFCEnable() => Promise +``` + +Indica si el dispositivo móvil dispone de la tecnología NFC y si esta opción está activada. + +**Returns:** Promise<RespuestaNFC> + +-------------------- + + ### Interfaces @@ -363,4 +377,12 @@ An object that represents a number of any kind. All JavaScript numbers are 64-bi | **join** | (separator?: string \| undefined) => string | | **slice** | (start?: number \| undefined, end?: number \| undefined) => T[] | + +#### RespuestaNFC + +| Prop | Type | +| ---------------- | ------------------------------------------- | +| **`disponible`** | Boolean | +| **`activo`** | Boolean | + diff --git a/android/src/main/java/com/cqesolutions/io/idniecap/idniecapPlugin.java b/android/src/main/java/com/cqesolutions/io/idniecap/idniecapPlugin.java index 77086f9..13cc389 100644 --- a/android/src/main/java/com/cqesolutions/io/idniecap/idniecapPlugin.java +++ b/android/src/main/java/com/cqesolutions/io/idniecap/idniecapPlugin.java @@ -1,8 +1,11 @@ package com.cqesolutions.io.idniecap; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.nfc.NfcAdapter; +import android.nfc.NfcManager; import android.util.Base64; import androidx.activity.result.ActivityResult; @@ -362,4 +365,37 @@ public void signHashDNIe(PluginCall call){ call.resolve(ret); } + + @PluginMethod + public void isNFCEnable(PluginCall call){ + Boolean disponible = true; + Boolean activo = true; + + NfcManager manager = (NfcManager) getActivity().getApplicationContext().getSystemService(Context.NFC_SERVICE); + NfcAdapter adapter = manager.getDefaultAdapter(); + + if(adapter==null) { + try{ + disponible = false; + } + catch (IllegalStateException ignored) { + // There's no way to avoid getting this if saveInstanceState has already been called. + } + } + else if (!adapter.isEnabled()) { + try{ + activo = false; + } + catch (IllegalStateException ignored) { + // There's no way to avoid getting this if saveInstanceState has already been called. + } + } + + + JSObject ret = new JSObject(); + ret.put("disponible",disponible); + ret.put("activo", activo); + call.resolve(ret); + + } } diff --git a/ios/Sources/idniecapPlugin/idniecap.swift b/ios/Sources/idniecapPlugin/idniecap.swift index 9cd7134..b6e8b31 100644 --- a/ios/Sources/idniecapPlugin/idniecap.swift +++ b/ios/Sources/idniecapPlugin/idniecap.swift @@ -1,5 +1,6 @@ import Foundation import iDNIe +import CoreNFC @objc public class idniecap: NSObject { @@ -589,4 +590,22 @@ import iDNIe } + @objc public func isNFCEnable() -> [String: Any] { + + guard NFCNDEFReaderSession.readingAvailable else { + var json: [String: Any] = [:] + json["disponible"] = false + json["activo"] = false + + return json + } + + + var json: [String: Any] = [:] + json["disponible"] = true + json["activo"] = true + + return json + + } } diff --git a/ios/Sources/idniecapPlugin/idniecapPlugin.swift b/ios/Sources/idniecapPlugin/idniecapPlugin.swift index a1bf3c5..f2f0a16 100644 --- a/ios/Sources/idniecapPlugin/idniecapPlugin.swift +++ b/ios/Sources/idniecapPlugin/idniecapPlugin.swift @@ -16,8 +16,7 @@ public class idniecapPlugin: CAPPlugin, CAPBridgedPlugin { CAPPluginMethod(name: "signTextDNIe", returnType: CAPPluginReturnPromise), CAPPluginMethod(name: "signDocumentDNIe", returnType: CAPPluginReturnPromise), CAPPluginMethod(name: "signHashDNIe", returnType: CAPPluginReturnPromise), -// CAPPluginMethod(name: "authenticationDNIeOpenSession", returnType: CAPPluginReturnPromise), -// CAPPluginMethod(name: "signChallengeDNIe", returnType: CAPPluginReturnPromise), + CAPPluginMethod(name: "isNFCEnable", returnType: CAPPluginReturnPromise), ] private let implementation = idniecap() @@ -92,4 +91,10 @@ public class idniecapPlugin: CAPPlugin, CAPBridgedPlugin { call.resolve(json) } + + @objc func isNFCEnable(_ call: CAPPluginCall) { + let json = implementation.isNFCEnable() + + call.resolve(json) + } } diff --git a/package.json b/package.json index 320d6c9..91725a1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "idniecap", - "version": "1.0.0", + "version": "1.0.1", "description": "Librería para el uso del DNIe en ionic. Disponible para android e iOS.", "main": "dist/plugin.cjs.js", "module": "dist/esm/index.js", diff --git a/src/definitions.ts b/src/definitions.ts index 3cac61d..50cb66c 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -35,6 +35,11 @@ export interface idniecapPlugin { */ signHashDNIe(options: {accessKey: String, pin: String, hash: Array, digest: number, certToUse: String}) : Promise; + /** + * Indica si el dispositivo móvil dispone de la tecnología NFC y si esta opción está activada. + */ + isNFCEnable() : Promise; + } export const PACEHandler = { @@ -158,10 +163,8 @@ export interface RespuestaFirma { error: String | undefined } -/* -export interface RespuestaAutenticacion { - respueta: Boolean, - error: String | undefined +export interface RespuestaNFC { + disponible: Boolean, + activo: Boolean } -*/ \ No newline at end of file diff --git a/src/web.ts b/src/web.ts index c7e7e68..ca3d1ba 100644 --- a/src/web.ts +++ b/src/web.ts @@ -1,6 +1,6 @@ import { WebPlugin } from '@capacitor/core'; -import type { EstadoLicencia, idniecapPlugin, MRZKey, RespuestaFirma, RespuestaReadPassport } from './definitions'; +import type { EstadoLicencia, idniecapPlugin, MRZKey, RespuestaFirma, RespuestaNFC, RespuestaReadPassport } from './definitions'; export class idniecapWeb extends WebPlugin implements idniecapPlugin { getMRZKey(options: {passportNumber: String, dateOfBirth: String, dateOfExpiry: String}): Promise { @@ -38,18 +38,8 @@ export class idniecapWeb extends WebPlugin implements idniecapPlugin { console.log(options); throw new Error('Method not implemented.'); } - /* - async authenticationDNIeOpenSession(options: {accessKey: String, pin: String}) : Promise - { - console.log("NOT IMPLEMENTED"); - console.log(options); - throw new Error('Method not implemented.'); - } - async signChallengeDNIe(options: {hash: Array, digest: Number, signPadding: String}) : Promise{ - console.log("NOT IMPLEMENTED"); - console.log(options); + async isNFCEnable(): Promise { throw new Error('Method not implemented.'); } - */ }