Los webkit.messageHandlers no funcionan en iPad.
Resumir el problema
Registré mi aplicación de iOS en la App Store, pero fue rechazada.
Básicamente funciona bien en el iPhone.
Pero he escuchado que hay una función que no funciona correctamente en el iPad.
La aplicación tiene parcialmente un webview.
En mis pruebas, no funcionó en iPads (15.2, 15.1). Es posible que tampoco funcione en versiones más antiguas.
La llamada a webkit.messageHandlers desde el webview no funciona.
Describir lo que has intentado
Al comienzo del proyecto, desarrollamos utilizando la sintaxis moderna de JavaScript.
Sin embargo, la sintaxis import/export en la versión de iOS 14.2 causó problemas y solucionó problemas de compatibilidad de código con webpack.
No he probado la solución porque no puedo entender por qué los iPhones y iPads se comportan de manera diferente.
Mi código
import { checkAndroid, checkIos } from "../../js/utils/index.js";
const step1El = document.querySelector("#step1");
const step2El = document.querySelector("#step2");
const btnEl = document.querySelector("button");
btnEl.onclick = function () {
if (!step1El.checked)
return alert("Please agree to the Blockchain Simplified Authentication Service Terms and Conditions");
if (!step2El.checked)
return alert("Please agree to the Collection and Use of Personal Information Terms and Conditions");
if (checkAndroid()) window.Android.agree();
if (checkIos()) webkit.messageHandlers.agree.postMessage(""); // no funciona en el iPad
};
document.querySelector(".tos<em>btn").onclick = () => {
if (checkAndroid()) window.Android.goTermsConditions(true);
if (checkIos()) webkit.messageHandlers.goTermsConditions.postMessage(true); // no funciona en el iPad
};
document.querySelector(".policy</em>btn").onclick = () => {
if (checkAndroid()) window.Android.goCollectionAgreement();
if (checkIos()) webkit.messageHandlers.goCollectionAgreement.postMessage(""); // no funciona en el iPad
};
davy.ai
Resumen del problema
La aplicación de iOS fue rechazada por la App Store debido a que hay una funcionalidad que no funciona correctamente en el iPad. Específicamente, la función del webview no está funcionando cuando se llama a
webkit.messageHandlers
desde el webview. El problema fue descubierto durante las pruebas en iPads con versiones de iOS 15.2 y 15.1. Es posible que el problema también exista en versiones más antiguas de iOS.Soluciones intentadas
Inicialmente, el proyecto fue desarrollado utilizando la sintaxis moderna de JavaScript. Sin embargo, la sintaxis de
import/export
causó problemas de compatibilidad con webpack en la versión de iOS 14.2. El código se corrigió para solucionar este problema, pero no está claro por qué la aplicación funciona de manera diferente en iPhones y iPads. Aún no se ha intentado ninguna solución.Código
El código incluye “event listeners” para el botón y otros dos elementos, que llaman a funciones dependiendo del tipo de dispositivo. Si el dispositivo es un Android, se utiliza el objeto
window.Android
para llamar a las funciones. De lo contrario, se utilizawebkit.messageHandlers
para llamar a las funciones en un dispositivo iOS. Sin embargo, esta funcionalidad no está funcionando correctamente en iPads.