// 07 EXTENSÃO NATIVA

ANE de impressão

Uma Air Native Extension que dá a uma app AIR / Flex aquilo que a runtime não tem: acesso direto às APIs de impressão nativas de iOS e Android, para emitir recibos, fechos de caixa e contas correntes em impressoras de talão.

// O problema

Uma app de gestão em AIR / Flex corre sobre uma runtime que não expõe impressão térmica nem impressoras Bluetooth/USB. A solução foi escrever uma extensão nativa que faz a ponte entre o ActionScript e o código nativo de cada plataforma, empacotada num único .ane consumido pela app.

// Bridge AS3 ⇄ nativo

AIR / AS3
app de gestão (Flex)
FREObject
ANE
interface comum empacotada .ane
nativo
implementação por plataforma
Android · Java iOS · Objective-C
PrintExtension.java
public class PrintExtension implements FREExtension {
  public FREContext createContext(String id) {
    return new PrintContext();        // expõe printReceipt, printZ, ...
  }
}

// iOS - Objective-C
FREObject printReceipt(FREContext ctx, void* d, uint32_t argc, FREObject argv[]) {
  [printer connect:device];        // Bluetooth / USB
  [printer writeESCPOS:payload];     // talão térmico
  return FREBool(YES);
}

// O que imprime

🧾
Recibos
Talões de venda emitidos diretamente do dispositivo, no momento da transação.
💰
Fechos de caixa
Resumos de fim de dia (fecho Z) impressos no posto, sem passar por servidor.
📋
Contas correntes
Extratos de cliente impressos no local, a partir dos dados da app.
📶
BT & USB
Suporte a impressoras térmicas por Bluetooth e USB, com detetação e reconexão.

// O que foi difícil

Empacotamento .ane
Reunir o código Java e Obj-C, os descritores de plataforma e as libs num único artefacto que o AIR SDK Harman consome.
Assíncrono entre mundos
Ligar e escrever em impressora são operações assíncronas; o resultado volta ao AS3 por eventos, sem bloquear a UI.

// detalhes

// nativoJava (Android) · Objective-C (iOS)
// runtimeAIR SDK Harman · AS3
// impressãoTérmica · Bluetooth + USB
// outputRecibos · fechos de caixa · contas correntes
// integraçãoUsada na app de trading multi-plataforma
// papelAutoria completa - Java, Obj-C e bridge AS3