Mover la aplicación web existente en una aplicación de teléfono nativa mediante un contenedor de navegador

Así que digamos que hay una aplicación web funcional de rios rubíes completamente funcional. Esta aplicación funciona y se ve muy bien en los teléfonos móviles. Desafortunadamente, esta aplicación web no se puede ver desde las tiendas de aplicaciones para teléfonos móviles, porque no es una aplicación nativa. Técnicamente se puede colocar un icono en un teléfono inteligente que abre el navegador, pero obviamente esto no es óptimo.

¿Hay una manera de crear una aplicación nativa (Android, iPhone) que es esencialmente un navegador, sin la barra de navegación? El envoltorio de este navegador solo cargaría la aplicación web y se comportaría como si hubiera abierto el navegador.

He buscado opciones como Phonegap y Titanium, pero parece que habrá una cantidad significativa de reescritura, y hay muy pocos fondos para esto.

Realmente no conozco iOS, pero hacerlo en Android será realmente fácil.

Primero, esta es tu actividad:

 package com.example.my_browser; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; public class MyActivity extends Activity { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView browser = (WebView)findViewById(R.id.browser); browser.loadUrl("http://google.com"); //Replace google.com with you webapp's URL } } 

Este es su diseño main.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <WebView android:id="@+id/browser" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

Y necesitará solicitar permiso de Internet en AndroidManifest.xml:

 <uses-permission android:name="android.permission.INTERNET" /> 

Acabo de probar esto en un emulador y funciona.

Esta respuesta es para iOS.

Puede tener un icono de su sitio web en la pantalla de inicio del dispositivo sin escribir una línea de código (no UIWebView, ninguna codificación nativa, no XCode).

  1. Descargar iPhone Configuration Utility de http://www.apple.com/support/iphone/enterprise/
  2. Inicie la Utilidad de configuración del iPhone y, en el menú de la izquierda, seleccione "Perfiles de configuración"
  3. En la sección General de tu nuevo perfil, rellena el nombre (aplicación MyWebsite) y el identificador (com.mycompany.coolapp). También puede agregar el nombre y la descripción de la organización.
  4. Desplázate hacia abajo y selecciona la sección Clips Web.
  5. En el campo Etiqueta puede introducir el nombre que será visible en la pantalla de inicio.
  6. La URL será la URL de su sitio web / aplicación web.
  7. Seleccione el icono que se utilizará como icono de la pantalla de inicio. Utilice por lo menos una resolución de 114×114 píxeles.
  8. Si selecciona "Pantalla completa", la barra de navegación y la barra de direcciones de Safari se ocultarán cuando inicie su aplicación web, por lo que puede tener una "aplicación" real.
  9. Haga clic en el botón "Exportar". Usted puede decidir si firmar su perfil (será visible por el usuario final cuando instale su perfil).
  10. Guarde el archivo .mobileconfig y cargarlo en su servidor web o enviarlo a sus usuarios finales por correo.
  11. Cuando el usuario final abra el archivo .mobileconfig en su dispositivo, el sistema le pedirá que instale el perfil de configuración. Después de la instalación se creará un icono de pantalla de inicio que apunta a su sitio web.

Actualización a partir de 2017 iPhone Configuration Utility ha sido reemplazado por Apple Configurator que se puede descargar gratis de App Store. Puede crear un nuevo perfil de configuración de la misma manera que se describe para Apple Configurator, seleccionando Archivo -> Nuevo perfil en la aplicación.

Editar 2
Como dijo @MrTJ en los comentarios. Al parecer, Apple no le permitirá tener una simple aplicación de "sitio web". Así que sus únicas opciones serían portar a Ruby, como el resto de mi respuesta describe, portar la aplicación de forma nativa o hacer una aplicación web como @MrTJ describe en su respuesta. Portarla de forma nativa, con el apoyo de servicios web como REST, probablemente sería la mejor solución. Las aplicaciones web son buenas , pero las aplicaciones nativas suelen ser más agradables . Depende de qué tipo de experiencia de usuario que desee proporcionar.
End editar 2

Editar 1
Necesito leer con más cuidado. Respondí a su pregunta suponiendo que quería incorporar la aplicación, sin necesidad de acceder a Internet. Si eso NO es lo que usted está tratando de hacer, entonces es definitivamente posible.

Sólo tiene que hacer una aplicación que tiene una vista web y carga la URL de base para el sitio. Es probable que desee hacer una versión especial del sitio que siempre tiene botones de nuevo, etc, por lo que el usuario nunca puede quedar atrapado en una esquina de su sitio (ya que desea que la navegación oculta).

También, personalmente no haría esto, usted puede , pero usted probablemente no debe. Usted tendrá que manejar lo que debe hacer cuando el usuario no tiene una conexión a Internet. Y usted puede hacer que sea menos feliz cuando ellos (potencialmente) pagado por una aplicación que no pueden usar en todas partes. Las aplicaciones nativas tienden a vender / realizar mucho mejor.
End editar 1

Mi reacción personal a esta pregunta

Pregunta fresca. Personalmente no soy un fan o Ruby o Rails (soy un poco más de un tipo Python, pero Python es en realidad por qué sé algo sobre esta situación), pero este es un problema bastante bueno independientemente.

Preguntas que debe hacerse

es posible? Probablemente

¿Es una buena idea? Probablemente no

¿Va a valer la pena el esfuerzo? Probablemente no

Y lo más importante, ¿Apple le permitirá venderlo? … Tal vez, pero para algo como esto, no lo sabrás hasta que lo intentes ….

Que necesitas

  1. Un WebView que utiliza un protocolo para hablar con su aplicación nativa. Esto sería como el hack de etiqueta hash URL utilizado para hablar con un iFrame en un navegador, o el protocolo que PhoneGap utiliza para comunicarse con su WebView

  2. Versión incrustada del intérprete Ruby. La gente ha estado haciendo esto en iOS con los intérpretes de Python y JavascriptCore . Algunas personas intentarán decirte que Apple no te dejará hacer esto, pero eso ya no es cierto. Tendrás que compilar Ruby específicamente para iOS, esto probablemente será molesto, pero apuesto a que si basas tu implementación en las implementaciones de Python / Javascript, podrías finalmente conseguir que funcione.

editar
Otra pregunta / respuesta de SO con relevancia para esta respuesta
Incorporar un motor de JavaScript en una aplicación de iOS
Editar final

  1. Versión incorporada de Rails … Buena suerte 🙂

  2. Método de activación de la aplicación Rails sin un servidor web (probablemente no se puede ejecutar apache localmente en un iPhone (sería difícil y probablemente se estrellaría de inmediato), y definitivamente no en Android). Deberá activar cada vista manualmente de alguna manera, canalizando la salida a una cadena o un archivo, y cargando esa cadena (HTML) o archivo en la aplicación WebView

  3. Método de activación de la navegación en la aplicación Rails. Esto requerirá la captura de prensas de enlace desde el WebView (puede ver el cambio de URL en iOS) y activar la vista de Rails adecuada para producir su HTML.

Problemas

  1. Ruby y Rails son MUY PESADOS . La mayoría de las implementaciones que he visto requieren por lo menos 256 MB de RAM, iOS matará instantáneamente su aplicación si intenta usar esta cantidad de memoria en el inicio. Android probablemente lo manejará con mucha menos gracia y solo se bloqueará inesperadamente en algún momento de la ejecución de la aplicación.

  2. Android no ejecuta código compilado nativo. Esto significa que necesitará ejecutar JRuby, lo que le dejará con un lenguaje interpretado en un lenguaje interpretado ( lea como Slow As Hell en un dispositivo móvil ).

  3. Esto requerirá escribir más Ruby, algunos Javascript, y MORE Java o Objective-C. En otras palabras, no lo hagas . Averigüe qué hace su aplicación, y el puerto.

Aprendizaje clave

Esto probablemente se llevará a cabo mucho más esfuerzo que cualquier desarrollador sano alguna vez desearía gastar en una "aplicación web simple". Usted será mucho mejor aprender el desarrollo nativo, ya que será necesario para conseguir este trabajo hecho de todos modos.

Sí, para iOS simplemente cargue una pantalla completa de UIWebView y cambie la URL actual de UIWebView a cualquiera que sea la ubicación de su aplicación web. El lanzamiento de UIWebview con URL específica

No sé nada acerca de Android, pero al parecer es el mismo proceso … Aquí ya vamos: ¿Cómo configurar url en WebView desde un archivo de diseño xml en Android?


Para comunicarse entre la aplicación iOS y su sitio web, puede utilizar stringByEvaluatingJavaScriptFromString mencionado aquí: Pasar la variable Javascript a Objective-C

Para hacer esto con Android, refiérase a las otras respuestas a esta pregunta donde ya han enumerado el código en su respuesta.

  • Authenticity_token en Rails + Android
  • Tipo de entrada = número no es posible insertar números negativos en el teléfono móvil
  • No se pueden enviar datos de JSON desde Android al servidor ROR
  • Cómo Firebase Auth con Rails?
  • ¿Cómo puedo verificar la facturación de Android en la aplicación con un servidor con Ruby?
  • ¿Cómo crear un Api seguro de Rails REST para mi aplicación?
  • Diseña aplicaciones Omniauth y Iphone / Android
  • Solicitud POST con Retrofit dando 500
  • Retrofit @Body apareciendo como parámetro en la petición HTTP
  • MultipartEntityBuilder para enviar imágenes al servidor de carril
  • Configurar la autenticación de http
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.