La AWP de MishiPay aumenta las transacciones 10 veces y ahorra 2.5 años de filas

Descubre cómo el cambio a la AWP ayudó al negocio de MishiPay.

MishiPay permite a los compradores escanear y pagar sus compras con sus smartphones, en lugar de perdían el tiempo haciendo cola para pagar. Con la función Scan & tecnología Go, los compradores pueden usar su propio teléfono para escanear el código de barras de los artículos y pagarlos, luego, simplemente se van la tienda. Los estudios revelan que las colas en las tiendas le cuestan al sector minorista global unos 200,000 millones de dólares anuales.

Nuestra tecnología se basa en las capacidades del hardware del dispositivo, como los sensores GPS y las cámaras que permiten a los usuarios localizar tiendas habilitadas para MishiPay, escanear códigos de barras de los artículos en las tiendas físicas y, luego, pagar que usen la forma de pago electrónico que prefieran. Las versiones iniciales de nuestro análisis Tecnología Go fueron aplicaciones para iOS y Android específicas de una plataforma y los usuarios pioneros amaron la tecnología. Leído para obtener información sobre cómo cambiar a una AWP aumentó las transacciones en 10 veces y ahorró 2.5 años de poniendo en fila

    10×

    Aumento de las transacciones

    2.5 años

    Se guardó la fila

Desafío

Los usuarios consideran que nuestra tecnología es muy útil cuando esperan en una fila o fila de salida, ya que les permite omitir la fila y tener una experiencia fluida en la tienda. Pero la molestia de descargar una Una aplicación para Android o iOS hicieron que los usuarios no eligieran nuestra tecnología a pesar del valor. Era un evento de crecimiento un desafío para MishiPay y necesitábamos aumentar la adopción por parte de los usuarios con una barrera de entrada más baja.

Solución

Nuestros esfuerzos por compilar y lanzar la AWP nos ayudaron a eliminar la molestia de la instalación y alentamos a usuarios nuevos a probar nuestra tecnología en una tienda física, a omitir la fila y a tener una experiencia de compra fluida. Desde el lanzamiento, vimos un aumento masivo de la adopción por parte de los usuarios nuestra AWP en comparación con nuestras aplicaciones específicas de la plataforma.

. Comparación en paralelo entre iniciar directamente la AWP (izquierda, más rápido) en comparación con la instalación y el inicio de la app para Android (derecha, más lenta).
Transacciones por plataforma. ¡SO:! 16397 (3.98%). Android: 13769 (3.34%) Web: 382184 (92,68%).
. La mayoría de las transacciones se realizan en la Web.

Información técnica detallada

Ubica tiendas habilitadas para MishiPay

Para habilitar esta función, nos basamos en el getCurrentPosition() junto con una solución de resguardo basada en IP.

const geoOptions = {
  timeout: 10 * 1000,
  enableHighAccuracy: true,
  maximumAge: 0,
};

window.navigator.geolocation.getCurrentPosition(
  (position) => {
    const cords = position.coords;
    console.log(`Latitude :  ${cords.latitude}`);
    console.log(`Longitude :  ${cords.longitude}`);
  },
  (error) => {
    console.debug(`Error: ${error.code}:${error.message}`);
    /**
     * Invoke the IP based location services
     * to fetch the latitude and longitude of the user.
     */
  },
  geoOptions,
);

Este enfoque funcionaba bien en las versiones anteriores de la app, pero luego se demostró que representaba un gran obstáculo. para los usuarios de MishiPay por los siguientes motivos:

  • Errores de ubicación en las soluciones de resguardo basadas en IP.
  • Una lista cada vez más grande de tiendas habilitadas para MishiPay por región requiere que los usuarios se desplacen por la lista y identificar la tienda correcta.
  • En ocasiones, los usuarios eligen accidentalmente la tienda equivocada, lo que hace que las compras se registren. incorrectamente.

Para solucionar estos problemas, incorporamos códigos QR únicos con ubicación geográfica en las pantallas de las tiendas para cada en una tienda física. allanó el camino para una experiencia de incorporación más rápida. Los usuarios solo deben escanear el QR con ubicación geográfica códigos impresos en el material de marketing presente en las tiendas para acceder a los aplicación web de Go. De esta manera, puede evitar escribir la dirección web mishipay.shop para acceder al servicio.

. Experiencia de análisis en la tienda con la AWP

Escaneando productos

Una función central de la app de MishiPay es el escaneo de códigos de barras, ya que permite a nuestros usuarios escanear sus sus propias compras y ven el total acumulado, incluso antes de que, de otro modo, hubieran alcanzado de registro.

Para crear una experiencia de análisis en la Web, identificamos tres capas principales.

Diagrama en el que se muestran las tres capas de subprocesos principales: transmisión de video por Internet, capa de procesamiento y capa de decodificador.

Transmisión de video por Internet

Con la ayuda del getUserMedia(), puede acceder a la cámara de vista posterior del usuario con las restricciones que se indican a continuación. Cómo invocar el método activa automáticamente un mensaje para que los usuarios acepten o rechacen el acceso a su cámara. Una vez que tengamos acceso a la transmisión de video por Internet, podemos retransmitirlo a un elemento de video, como se muestra a continuación:

/**
 * Video Stream Layer
 * https://developer.mozilla.org/docs/Web/API/MediaDevices/getUserMedia
 */
const canvasEle = document.getElementById('canvas');
const videoEle = document.getElementById('videoElement');
const canvasCtx = canvasEle.getContext('2d');
fetchVideoStream();
function fetchVideoStream() {
  let constraints = { video: { facingMode: 'environment' } };
  if (navigator.mediaDevices !== undefined) {
    navigator.mediaDevices
      .getUserMedia(constraints)
      .then((stream) => {
        videoEle.srcObject = stream;
        videoStream = stream;
        videoEle.play();
        // Initiate frame capture - Processing Layer.
      })
      .catch((error) => {
        console.debug(error);
        console.warn(`Failed to access the stream:${error.name}`);
      });
  } else {
    console.warn(`getUserMedia API not supported!!`);
  }
}

Capa de procesamiento

Para detectar un código de barras en una transmisión de video por Internet determinada, debemos capturar fotogramas de forma periódica y transferirlos a la capa de decodificador. Para capturar un fotograma, simplemente dibujamos las transmisiones de VideoElement en un objeto HTMLCanvasElement con el drawImage() de la API de Canvas.

/**
 * Processing Layer - Frame Capture
 * https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Manipulating_video_using_canvas
 */
async function captureFrames() {
  if (videoEle.readyState === videoEle.HAVE_ENOUGH_DATA) {
    const canvasHeight = (canvasEle.height = videoEle.videoHeight);
    const canvasWidth = (canvasEle.width = videoEle.videoWidth);
    canvasCtx.drawImage(videoEle, 0, 0, canvasWidth, canvasHeight);
    // Transfer the `canvasEle` to the decoder for barcode detection.
    const result = await decodeBarcode(canvasEle);
  } else {
    console.log('Video feed not available yet');
  }
}

Para casos de uso avanzados, esta capa también realiza algunas tareas de procesamiento previo, como recortar, rotando o convirtiendo a escala de grises. Estas tareas pueden consumir mucha CPU y dar como resultado la aplicación no responde, dado que el escaneo de códigos de barras es una operación de larga duración. Con la ayuda del OffscreenCanvas, podemos descargar la tarea de uso intensivo de CPU a un trabajador web. En dispositivos que admiten la aceleración de gráficos por hardware, la API de WebGL y su WebGL2RenderingContext puede para optimizar las ganancias en las tareas de procesamiento previo con uso intensivo de CPU.

Capa de decodificador

La capa final es la de codificador, que se encarga de decodificar los códigos de barras de las tramas. capturada por la capa de procesamiento. Gracias a los API de Shape Detection (que es no disponible en todos los navegadores), el navegador decodifica el código de barras desde un ImageBitmapSource, que puede ser un elemento img, un elemento SVG image, un elemento video, un elemento canvas, un objeto Blob, un objeto ImageData o un objeto ImageBitmap.

Diagrama en el que se muestran las tres capas de subprocesos principales: transmisión de video por Internet, capa de procesamiento y API de Shape Detection.

/**
 * Barcode Decoder with Shape Detection API
 * https://web.dev/shape-detection/
 */
async function decodeBarcode(canvas) {
  const formats = [
    'aztec',
    'code_128',
    'code_39',
    'code_93',
    'codabar',
    'data_matrix',
    'ean_13',
    'ean_8',
    'itf',
    'pdf417',
    'qr_code',
    'upc_a',
    'upc_e',
  ];
  const barcodeDetector = new window.BarcodeDetector({
    formats,
  });
  try {
    const barcodes = await barcodeDetector.detect(canvas);
    console.log(barcodes);
    return barcodes.length > 0 ? barcodes[0]['rawValue'] : undefined;
  } catch (e) {
    throw e;
  }
}

En el caso de los dispositivos que todavía no admiten la API de Shape Detection, necesitamos una solución de resguardo para decodificar. los códigos de barras. La API de Shape Detection expone una getSupportedFormats() que ayuda a cambiar entre la API de Shape Detection y la solución de resguardo.

// Feature detection.
if (!('BarceodeDetector' in window)) {
  return;
}
// Check supported barcode formats.
BarcodeDetector.getSupportedFormats()
.then((supportedFormats) => {
  supportedFormats.forEach((format) => console.log(format));
});

Diagrama de flujo que muestra cómo se usa la API de Shape Detection o la solución de resguardo, según la compatibilidad con el detector de código de barras y los formatos de códigos de barras compatibles.

Solución de resguardo

Hay varias bibliotecas de código abierto y de escaneo empresariales disponibles que pueden integrarse fácilmente. con cualquier aplicación web para implementar el análisis. Estas son algunas de las bibliotecas que usa MishiPay recomendar.

.
Nombre de la biblioteca Tipo Solución de Wasm Formatos de códigos de barras
QuaggaJs Código abierto No 1D
ZxingJs Código abierto No 1 d y 2D (limitado)
CodeCorp Enterprise 1 d y 2D
Scandit Enterprise 1 d y 2D
Comparación entre bibliotecas de código abierto y comerciales para escaneo de códigos de barras

Todas las bibliotecas anteriores son SDK completos que componen todas las capas mencionadas anteriormente. También Expón interfaces para admitir varias operaciones de análisis. Según los formatos de códigos de barras y de detección necesaria para el caso empresarial, una decisión puede ser entre las soluciones Wasm y las que no lo son. A pesar de la sobrecarga que implica requerir un recurso adicional (Wasm) para decodificar el código de barras, Wasm las soluciones superan a las que no son de Wasm en términos de exactitud.

Scandit fue nuestra elección principal. Admite todos los códigos formatos requeridos para nuestros casos de uso empresariales supera a todas las bibliotecas de código abierto disponibles de escaneo.

El futuro del análisis

Una vez que la API de Shape Detection sea completamente compatible con todos los navegadores principales, es posible que tengamos una Nuevo elemento HTML <scanner> que tiene las capacidades necesarias para un escáner de código de barras Ingeniería de MishiPay cree que hay un caso de uso sólido para que la funcionalidad de escaneo de códigos de barras sea un nuevo elemento HTML debido a la creciente cantidad de bibliotecas con licencia y de código abierto que permiten experiencias como Scan & Go y muchas más.

Conclusión

La fatiga de las apps es un problema al que se enfrentan los desarrolladores cuando sus productos ingresan al mercado. Los usuarios suelen querer para comprender el valor que brinda una aplicación antes de descargarla. En una tienda, donde MishiPay salva a los compradores y mejora su experiencia, es contradictorio esperar a que descargar antes de que puedan usar una aplicación. Aquí es donde nuestra AWP ayuda. Eliminar la barrera aumentamos 10 veces nuestras transacciones y permitimos que los usuarios ahorraran 2.5 años esperando en la fila.

Agradecimientos

Joe Medley revisó este artículo.