MPI/API/NFCMovel
(Criou página com ' __TOC__ * Para utilização do NFC móvel (integrado ao NFC do celular), é necessário verificar as suas especificações/protocolo. * O ID geralmente será diferente a cad...') |
|||
(Uma edição intermediária de um usuário não apresentada) | |||
Linha 4: | Linha 4: | ||
* Para utilização do NFC móvel (integrado ao NFC do celular), é necessário verificar as suas especificações/protocolo. | * Para utilização do NFC móvel (integrado ao NFC do celular), é necessário verificar as suas especificações/protocolo. | ||
* O ID geralmente será diferente a cada leitura. Verifique as especificações técnicas: | * O ID geralmente será diferente a cada leitura. Verifique as especificações técnicas: | ||
− | ** '''Simple NDEF Exchange Protocol'' - Technical Specification - SNEP 1.0NFCForum-TS-SNEP_1.0 | + | ** '''Simple NDEF Exchange Protocol''' - Technical Specification - SNEP 1.0NFCForum-TS-SNEP_1.0 |
<BR> | <BR> | ||
Abaixo, exemplo de aplicação implementada com o ''framework Ionic'' (multi-plataforma). | Abaixo, exemplo de aplicação implementada com o ''framework Ionic'' (multi-plataforma). | ||
Linha 30: | Linha 30: | ||
Na função '''accountEventSubscribe()''', a mensagem compartilhada via NFC, é atualizada sempre que uma nova conta é ativada. | Na função '''accountEventSubscribe()''', a mensagem compartilhada via NFC, é atualizada sempre que uma nova conta é ativada. | ||
<BR> | <BR> | ||
− | * | + | * [https://developer.android.com/reference/android/nfc/NdefRecord.html#TNF_WELL_KNOWN TNF_WELL_KNOWN] |
== Código exemplo == | == Código exemplo == | ||
Linha 36: | Linha 36: | ||
{| class="wikitable" width="65%" | {| class="wikitable" width="65%" | ||
| | | | ||
− | <source lang=" | + | <source lang="javascript"> |
import { Events } from 'ionic-angular'; | import { Events } from 'ionic-angular'; | ||
import { Platform } from 'ionic-angular'; | import { Platform } from 'ionic-angular'; |
Edição atual tal como 19h59min de 26 de fevereiro de 2019
Tabela de conteúdo |
- Para utilização do NFC móvel (integrado ao NFC do celular), é necessário verificar as suas especificações/protocolo.
- O ID geralmente será diferente a cada leitura. Verifique as especificações técnicas:
- Simple NDEF Exchange Protocol - Technical Specification - SNEP 1.0NFCForum-TS-SNEP_1.0
Abaixo, exemplo de aplicação implementada com o framework Ionic (multi-plataforma).
A função rwNFC() é utilizada para compartilhar uma mensagem via NFC. Porém, antes de iniciar a sua operação, é necessário verificar se o aparelho possui NFC e, se está ativo. A função NFCcheck() é chamada e retorna:
- NFC_OK caso o aparelho atenda aos requisitos
- NO_NFC se não há modulo NFC no aparelho
- NFC_DISABLED se o módulo NFC existe, porém está desativado.
A função IOSconfig() é chamada para realizar uma configuração adicional de inicio de sessão, caso o sistema operacional em uso é o IOS.
Na função rwNFC() é alocado um listener, que dispara um evento, quando uma tag NDEF é lida. Para evitar que Android Beam® envie respostas padrões, é importante que o programa já compartilhe suas mensagem. Por isso, nas linhas 83 e 84, uma string de login é criada, no formato user:password, e então repassada para a função textRecord(text, languageCode, id).
83 let login:string = this.sharedData.getUser() + ":" + this.sharedData.getPasswd(); 84 let message = this.ndef.textRecord(login, null, null);
A função textRecord encapsula uma mensagem, do tipo plain text, com TNF_WELL_KNOWN* e tipo RTD_TEXT*, e retorna um representação JSON de uma mensagem NDEF.
Para utilizar a função basta passar, como parâmetro, uma mensagem de texto e, opcionalmente, o código ISO/IANA da língua (por exemplo, 'fi', 'en-US', 'fr- CA', 'jp') e um ID.
Esta mensagem NDEF pode ser compartilhada via NFC, utilizando a função this.nfc.share:
85 this.nfc.share([message])
Na função accountEventSubscribe(), a mensagem compartilhada via NFC, é atualizada sempre que uma nova conta é ativada.
[editar] Código exemplo
import { Events } from 'ionic-angular'; import { Platform } from 'ionic-angular'; import { ToastController } from 'ionic-angular'; import { Injectable } from '@angular/core'; import { NFC, Ndef } from '@ionic-native/nfc'; import { OpenNativeSettings } from '@ionic-native/open-native-settings'; import { sharedDataService } from '../sharedDataService/sharedDataService'; @Injectable() export class NFCService { constructor( private nfc: NFC, private ndef: Ndef, public events: Events, public plt: Platform, private openNativeSettings: OpenNativeSettings, public toastCtrl: ToastController, private sharedData: sharedDataService, ) { this.accountEventSubscribe(); } accountEventSubscribe(){ //Evento ocorre quando uma conta for selecionada. Isto inclui a inicializacao do app. this.events.subscribe('storage:read', (key) => { let login:string = this.sharedData.getUser() + ":" + this.sharedData.getPasswd(); let message = this.ndef.textRecord(login, null, null); this.nfc.share([message]).then(data => { console.log('NFCService: SUCCESS ON SHARE - ', data); }, (err) => { console.log('NFCService: ERROR ON SHARE - ', err); }); }); } NFCcheck(){ return new Promise((resolve, reject) => { this.sharedData.get_NO_NFC_DEVICE().then((value) => { if(value)){ reject('NO_NFC'); }else { this.nfc.enabled().then(data => { //console.log('NFCService: Check - ', data); resolve(data); }, (err) => { //'NO_NFC' - Celular sem NFC //'NFC_DISABLED' - NFC disabilitado //'NDEF_PUSH_DISABLED' - Android Beam desabilitado if(err == 'NO_NFC'){ //console.log("NFCService: Check - ", err); this.sharedData.set_NO_NFC_DEVICE(true); reject(err); } if(err == 'NFC_DISABLED'){ //console.log("NFCService: Check - ", err); reject(err); } }); } }); }); } IOSconfig(){ return new Promise((resolve, reject) => { if(this.plt.is('android')){ resolve('CONFIG_OK'); } else { this.nfc.beginSession().subscribe( event => resolve('CONFIG_OK'), err => reject('CONFIG_NOK') ); } }); } rwNFC(){ this.NFCcheck().then((value) => { this.IOSconfig().then((IOSvalue) => { this.nfc.addNdefListener((data) => { console.log('NFCService: Attached ', data); let login:string = this.sharedData.getUser() + ":" + this.sharedData.getPasswd(); let message = this.ndef.textRecord(login, null, null); this.nfc.share([message]).then(data => { console.log('NFCService: SUCCESS ON SHARE - ', data); }, (err) => { console.log('NFCService: ERROR ON SHARE - ', err); //Android Beam desabilitado if(err == 'NDEF_PUSH_DISABLED' && this.plt.is('android') ){ let titleText = 'Android Beam'; let msgText = 'A opção Android Beam deve estar ativada para que ocorra o acesso via NFC'; let buttonsInfo = [{msg:"Cancelar" , color:"connectionNOK"}, {msg:'Configurações' , color:"connectionOK"}]; this.sharedData.showAlert(titleText, msgText, buttonsInfo).then((option) => { if(option==1){ this.openNativeSettings.open('nfcsharing'); } }); } }); }, (err) => { }).subscribe( event => console.log("evento::::", event), err => console.log("erro:::::", err) ); }); }, (err) => { if(err == 'NO_NFC'){ this.sharedData.sendToast("Este celular não suporta NFC", 3000); return; } else if(err == 'NFC_DISABLED'){ this.sharedData.sendToast("Função NFC está desabilitada no celular", 3000); return; } }); } } |