Skip to main content

Nada es peor cuando se cocina con un dispositivo m贸vil que su pantalla se apaga en medio de un paso de receta. Descubra c贸mo el sitio de cocina BettyCrocker.com utiliz贸 la API de Wake Lock para evitar que esto suceda.


Actualizado

Durante casi un siglo, Betty Crocker ha sido la fuente estadounidense de instrucci贸n de cocina moderna y desarrollo de recetas confiables. Lanzado en 1997, su sitio BettyCrocker.com
hoy recibe m谩s de 12 millones de visitantes al mes. Despu茅s de ellos implement贸 la API de Wake Lock, su
indicadores de
intento de compra
fueron aproximadamente un 300% m谩s altos
para los usuarios de wake lock en comparaci贸n con todos los usuarios.

Las aplicaciones retiradas de iOS y Android

Liberado a mucha fanfarria En 2014, Betty Crocker recientemente sac贸 sus aplicaciones de Apple App Store y Google Play Store despu茅s de haber sido despriorizadas. Durante mucho tiempo, el equipo de Betty Crocker ha preferido agregar nuevas funciones al sitio m贸vil en lugar de las aplicaciones de iOS / Android. La plataforma t茅cnica en la que se crearon las aplicaciones de iOS / Android estaba desactualizada y la empresa no ten铆a los recursos para respaldar la actualizaci贸n y el mantenimiento de las aplicaciones en el futuro. La aplicaci贸n web tambi茅n era objetivamente mucho m谩s grande en cuanto a tr谩fico, m谩s moderna y m谩s f谩cil de mejorar.

Las aplicaciones de iOS / Android ten铆an una caracter铆stica asesina, sin embargo, que a sus usuarios les encant贸:

Consejo profesional de cocina millennial: el @BettyCrocker La aplicaci贸n m贸vil no se aten煤a ni se bloquea cuando sigue una receta. –@AvaBeilke

El 80% de las personas cocinan con un dispositivo en la cocina, pero la atenuaci贸n y el bloqueo de la pantalla son un problema. Que hizo @BettyCrocker 驴hacer? Se actualiz贸 su aplicaci贸n para que NO se aten煤e cuando los usuarios est茅n en una receta. –@Katie_Tweedy_

Llevando la caracter铆stica asesina a la web con la API de Wake Lock

Al cocinar con un dispositivo, no hay nada m谩s frustrante que tener que tocar la pantalla con las manos sucias o incluso la nariz cuando la pantalla se apaga. Betty Crocker se pregunt贸 c贸mo pod铆an transferir la caracter铆stica principal de sus aplicaciones iOS / Android a la aplicaci贸n web. Fue entonces cuando se enteraron de
Proyecto Fugu y la API de Wake Lock.

doughy-fingers-5594163

La API de Wake Lock proporciona una forma de evitar que el dispositivo aten煤e o bloquee la pantalla. Esta capacidad permite nuevas experiencias que, hasta ahora, requer铆an una aplicaci贸n iOS / Android. La API Wake Lock reduce la necesidad de soluciones piratas y potencialmente hambrientas de energ铆a.

Solicitar un bloqueo de activaci贸n

Para solicitar un bloqueo de activaci贸n, debe llamar al navigator.wakeLock.request() m茅todo que devuelve un WakeLockSentinel objeto. Utilizar谩 este objeto como
valor centinela. El navegador puede rechazar la solicitud por varias razones (por ejemplo, porque la bater铆a est谩 demasiado baja), por lo que es una buena pr谩ctica envolver la llamada en un try鈥atch declaraci贸n.

Liberar un bloqueo de activaci贸n

Tambi茅n necesita una forma de liberar un bloqueo de activaci贸n, que se logra llamando al release() m茅todo del WakeLockSentinel objeto. Si desea liberar autom谩ticamente el bloqueo de activaci贸n despu茅s de que haya pasado un cierto per铆odo de tiempo, puede usar window.setTimeout() llamar release(), como se muestra en el ejemplo siguiente.


let wakeLock = null;


const requestWakeLock = async () => {
try {
wakeLock = await navigator.wakeLock.request('screen');
wakeLock.addEventListener('release', () => {
console.log('Wake Lock was released');
});
console.log('Wake Lock is active');
} catch (err) {
console.error(`${err.name}, ${err.message}`);
}
};


await requestWakeLock();
window.setTimeout(() => {
wakeLock.release();
wakeLock = null;
}, 5000);

La implementaci贸n

Con la nueva aplicaci贸n web, los usuarios deben poder navegar f谩cilmente a trav茅s de una receta, completar los pasos e incluso alejarse sin el bloqueo de la pantalla. Para lograr este objetivo, el equipo primero construy贸 un prototipo r谩pido de front-end como prueba de concepto y para recopilar informaci贸n de UX.

Despu茅s de que el prototipo result贸 煤til, dise帽aron un
Componente vue.js
que podr铆a compartirse con todas sus marcas (BettyCrocker,
Pillsburyy Cucharada). Aunque solo Betty Crocker ten铆a aplicaciones de iOS y Android, los tres sitios tienen una base de c贸digo compartida, por lo que pudieron implementar el componente una vez y luego implementarlo en todas partes, como se muestra en las capturas de pantalla a continuaci贸n.

www-bettycrocker-com_-5724685
Interruptor de bloqueo de activaci贸n de BettyCrocker.com.
www-pillsbury-com_-2503224
Interruptor de bloqueo de activaci贸n de Pillsbury.com.
www-tablespoon-com_-1430753
Interruptor de bloqueo de activaci贸n de Tablespoon.com.

Al desarrollar el componente basado en el marco modernizado del nuevo sitio, hubo un fuerte enfoque en la
ViewModel capa del patr贸n MVVM. El equipo tambi茅n program贸 teniendo en cuenta la interoperabilidad para habilitar la funcionalidad en los marcos heredados y nuevos del sitio.

Para realizar un seguimiento de la visibilidad y la usabilidad, Betty Crocker integr贸 el seguimiento anal铆tico de los eventos principales en el ciclo de vida del bloqueo de activaci贸n. El equipo utiliz贸 la gesti贸n de funciones para implementar el componente de bloqueo de activaci贸n en un solo sitio para la implementaci贸n de producci贸n inicial y luego implement贸 la funci贸n en el resto de los sitios despu茅s de monitorear el uso y el estado de la p谩gina. Contin煤an monitoreando los datos anal铆ticos en funci贸n del uso de este componente.

Como medida de seguridad para los usuarios, el equipo cre贸 un tiempo de espera forzado para desactivar el bloqueo de activaci贸n despu茅s de una hora de inactividad. La implementaci贸n final que decidieron fue, a corto plazo, un interruptor de palanca en todas las p谩ginas de recetas en sus sitios. A largo plazo, visualizan una vista de p谩gina de recetas renovada.

El contenedor de wake lock

var wakeLockControl = () => {
return import( './wakeLock');
};

export default {
components: {
wakeLockControl: wakeLockControl,
},
data() {
return {
config: {},
wakeLockComponent: '',
};
},
methods: {
init: function(config) {
this.config = config || {};
if ('wakeLock' in navigator && 'request' in navigator.wakeLock) {
this.wakeLockComponent = 'wakeLockControl';
} else {
console.log('Browser not supported');
}
},
},
};

El componente de bloqueo de activaci贸n

<template>
<div class="wakeLock">
<div class="textAbove"></div>
<label class="switch" :aria-label="settingsInternal.textAbove">
<input type="checkbox" @change="onChange()" v-model="isChecked">
<span class="slider round"></span>
</label>
</div>
</template>

<script type="text/javascript">
import debounce from 'lodash.debounce';

const scrollDebounceMs = 1000;

export default {
props: {
settings: { type: Object },
},
data() {
return {
settingsInternal: this.settings || {},
isChecked: false,
wakeLock: null,
timerId: 0,
};
},
created() {
this.$_raiseAnalyticsEvent('Wake Lock Toggle Available');
},
methods: {
onChange: function() {
if (this.isChecked) {
this.$_requestWakeLock();
} else {
this.$_releaseWakeLock();
}
},
$_requestWakeLock: async function() {
try {
this.wakeLock = await navigator.wakeLock.request('screen');
this.$_handleAbortTimer();
document.addEventListener(
'visibilitychange',
this.$_handleVisibilityChange,
);
window.addEventListener(
'scroll',
debounce(this.$_handleAbortTimer, scrollDebounceMs),
);
this.$_raiseAnalyticsEvent('Wake Lock Toggle Enabled');
} catch (e) {
this.isChecked = false;
}
},
$_releaseWakeLock: function() {
try {
this.wakeLock.release();
this.wakeLock = null;
this.$_handleAbortTimer();
document.removeEventListener(
'visibilitychange',
this.$_handleVisibilityChange,
);
window.removeEventListener(
'scroll',
debounce(this.$_handleAbortTimer, scrollDebounceMs),
);
} catch (e) {
console.log(`Wake Lock Release Error: ${e.name}, ${e.message}`);
}
},
$_handleAbortTimer: function() {
if (this.timerId !== 0) {
clearTimeout(this.timerId);
this.timerId = 0;
}
if (this.isChecked) {
this.timerId = setTimeout(
this.$_releaseWakeLock,
this.settingsInternal.timeoutDurationMs,
);
}
},
$_handleVisibilityChange: function() {
if (this.isChecked) {
this.$_releaseWakeLock();
this.isChecked = false;
}
},
$_raiseAnalyticsEvent: function(eventType) {
let eventParams = {
EventType: eventType,
Position: window.location.pathname || '',
};
Analytics.raiseEvent(eventParams);
},
},
};
</script>

Resultados

El componente Vue.js se implement贸 en los tres sitios y arroj贸 excelentes resultados. Durante el per铆odo comprendido entre el 10 de diciembre de 2019 y el 10 de enero de 2020, BettyCrocker.com inform贸 las siguientes m茅tricas:

  • De todos los usuarios de Betty Crocker con un navegador compatible con la API de Wake Lock, el 3,5% habilit贸 la funci贸n de inmediato, convirti茅ndola en una de las 5 acciones principales.
  • La duraci贸n de la sesi贸n para los usuarios que habilitaron el bloqueo de activaci贸n fue 3,1 veces m谩s larga que para los usuarios que no lo hicieron.
  • La tasa de rebote para los usuarios que habilitaron el bloqueo de activaci贸n fue un 50% m谩s baja que para aquellos que no utilizan la funci贸n de bloqueo de activaci贸n.
  • Los indicadores de intenci贸n de compra fueron aproximadamente un 300% m谩s altos para los usuarios de wake lock en comparaci贸n con todos los usuarios.

3.1

Mayor duraci贸n de la sesi贸n

300%

Indicadores de intenci贸n de compra m谩s altos

Conclusiones

Betty Crocker ha obtenido resultados fant谩sticos con la API de Wake Lock. Puede probar la funci贸n usted mismo buscando su receta favorita en cualquiera de sus sitios (BettyCrocker,
Pillsburyo Cucharada) y habilitando el Evite que la pantalla se oscurezca mientras cocina palanca.

Los casos de uso de los wake locks no se detienen en los sitios de recetas. Otros ejemplos son las aplicaciones de tarjetas de embarque o boletos que necesitan mantener la pantalla encendida hasta que se haya escaneado el c贸digo de barras, las aplicaciones de estilo quiosco que mantienen la pantalla encendida continuamente o las aplicaciones de presentaci贸n basadas en la web que evitan que la pantalla se quede inactiva durante una presentaci贸n.

Hemos recopilado todo lo que necesita saber sobre la API de Wake Lock en un art铆culo completo en este mismo sitio. 隆Feliz lectura y feliz cocina!

Agradecimientos

los persona amasando masa foto cortes铆a de
Julian Hochgesang
en Unsplash.