Permitir que un cliente responda a las reseñas de usuarios en las apps

Hoy hablaremos de un problema que me he encontrado en el trabajo, y es el de saber cómo un cliente puede responder a las reseñas que los usuarios le realizan de las apps que hemos realizado para ellos.

Permisos a la cuenta en android

En android la verdad es que ha sido muy sencillo. Adjunto dos pantallazos en donde se verá muy fácilmente los pasos a seguir para poder hacerlo desde el panel de administración de play.google.com/apps/publish.

Android, dar acceso a responder comentarios

Android, dar acceso a responder comentarios 2

Ios

Olvídate de que sea como en Android, aquí no se pueden responder reseñas por muy injustas que sean o por muy inexactas que parezcan. Aquí pongo una serie de links de páginas de desarrolladores preguntando exactamente lo mismo que yo:

Y eso es todo por hoy

Consejos para que Apple apruebe tu app a la primera

Pues este es un post abierto a todo el mundo.

Tu aplicación no debe:

  • Tener errores. Comprueba bien que todo funciona correctamente.
  • Contener nada erótico, violento, blasfemo contra religiones, racista o dañino para el usuario. Hay muchos niños que acceden a aplicaciones y no deben poder acceder a una aplicación con estas características.
  • Ser una copia de otra aplicación. Por ejemplo, puedo tener problemas si quiero hacer una linterna, puede que ya haya muchas aplicaciones así en el mercado, pero precisamente por ello puede que nos la echen para atrás.
  • Usar contenido que tenga copyright. En el caso de que en la revisión lo vean puede que te la rechacen.
  • Usar la palabra beta o lite en el nombre de la aplicación.
  • Tener un tamaño muy grande. A partir de x MB de tamaño a través de redes móviles no se podrá descargar, apple no lo permite. Para descargárselo es necesario estar conectado a una red wifi.
  • Mentir en cuanto a la descripción del producto. Si tu aplicación sirve para finanzas entonces su descripción tiene que corresponder a su utilidad.
  • Vender contenidos a través de otra plataforma que no sea la In-App Purchase(IAP), que es la plataforma de Apple para distribuir.

Y eso es en principio por encima. Más información puedes tenerla aquí.

¿Cómo permitir la descarga de aplicaciones iOS sin que pasen por itunes y legalmente?

Hoy explicaremos cómo lograr que una aplicación que estemos desarrollando pueda descargársela cualquier usuario desde su iPhone o iPad simplemente clicando sobre un enlace.

Requisitos que necesitamos:
1 – La licencia de Apple Developer Enterprise Program. Con la Apple developer Program no vale.
2 – Un https desde el que incluir los archivos a descargar.
Pasos a seguir:
Entrar dentro del Member Center y crear un certíficado “In-House and Ad Hoc”.
Crear un App ID de nuestra aplicación.
Crear un provisioning profile de distribución del tipo “In House”.
Con el xCode indicamos en el proyecto la app id, el certificado y el provisioning profile creados y hacemos un archive.
Exportamos la aplicación ad hoc obteniendo así un .ipa
Creamos dos archivos, un index.html y un nombreaplicacion.plist

El index.html contendrá la siguiente información:

<a href="itms-services://?action=download-manifest&url=https://www.yises.com/app/nombreaplicacion.plist">
Clica en este link para instalar
</a>

El nombreaplicacion.plist tendrá lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
  <key>items</key>
  <array>
   <dict>
    <key>assets</key>
    <array>
     <dict>
      <key>kind</key>
      <string>software-package</string>
      <key>url</key>
      <string>https://www.yises.com/app/nombreaplicacion.ipa</string>
     </dict>
    </array>
    <key>metadata</key>
    <dict>
      <key>bundle-identifier</key>
      <string>com.yises.app</string>
      <key>bundle-version</key>
      <string>1.0</string>
      <key>kind</key>
      <string>software</string>
      <key>title</key>
      <string>La mejor aplicación del mundo</string>
    </dict>
   </dict>
  </array>
 </dict>
</plist>

Estos tres archivos los pondremos en la ruta que estemos indicando y en el navegador de nuestro iPad/iPhone accedemos al index.html. Al clicar en el enlace nos preguntará si queremos instalar la aplicación en cuestión, y una vez hecho nos preguntará si confiamos en el que ha creado la aplicación, es decir, nosotros.

Tipos de licencias de desarrollo en iOS

Hoy me ha tocado pelearme otra vez con ios y enterarme a las bravas de cosas que deberían de ser más sencillas.

ios Developer

El objetivo era hacer una aplicación ad hoc para un cliente de una aplicación que ya teníamos en la apple store. Pensábamos que era algo sencillo, pero pronto nos dimos cuenta que no permitía que los usuarios se descargaran el .ipa correctamente (solo en aquellos dispositivos que habíamos dato de alta como desarrollo). Después de buscar algo de información por internet nos dimos cuenta que nuestra licencia de 100 euros/año no valía para estas cosas, y que teníamos que adquirir la licencia de 300 euros/año…

Y como yo me encontré muy perdido en ese momento he hecho un listado de los tipos de licencias que tiene iOS actualmente:

  • Apple Developer: Opción gratuita. Nos vale para acceder a documentación, herramientas de desarrollo y con ello podremos hacer pruebas de debug de la aplicación a través del simulador de XCode.
  • iOS University Program: Opción gratuita pero únicamente a universidades que estén incluidas dentro de este programa.
  • iOS Developer Program: Esta era la opción que teníamos contratada. Por 99 dólares al año nos permitía entre otras cosas instalar aplicaciones en nuestros dispositivos (registrándolos previamente en la web de Apple) y publicar en la AppStore nuestras aplicaciones y comercializarlas (para nosotros un 70% de beneficios y para ellos el 30% restante)
  • iOS Developer Enterprise Program: Esta era la opción que necesitábamos para publicar de forma privada a la empresa aplicaciones ad hoc. Vamos, aplicaciones que no pasen por la apple store. Cuesta la friolera de 300 dolares/año. Y no es que te la den directamente, sino que primero la solicitas, le das tus datos, y después de un tiempo te aprueban la licencia y pagas (dicen que 7 días).

Y así nos encontramos, esperando… (solo queremos pagar y que nos dejen hacer el app)

Apps nativas vs apps basadas en web vs apps hibridas

Como todos sabréis, actualmente hay tres tipos de aplicaciones móviles: Nativas, basadas en web e híbridas.

apps_hibridwebnative

  • Una aplicación nativa es aquella que está escrita en java (en el caso de android) o en Objetive-C (en el caso de iOS). Como características decir que tiene acceso completo a las funcionalidades de hardware del dispotivo y sólo puede descargarse desde las app stores.
  • Una aplicación para web son webs que utilizan toolkits especiales de javascript (como jQuery Mobile y Sencha Touch) y css personalizados para hacer que los sitios parezcan y funcionen como apps nativas. Sin embargo, sólo pueden ser accedidas a través de navegador, no pueden ser descargadas desde la app store y no tienen acceso a las funciones de hardware del móvil/tablet.
  • Las aplicaciones híbridas están en el medio de las dos anteriores. Básicamente son webs que están embebidas dentro de código nativo. Lo bueno es que esto te permite utilizar funciones que utilicen características propias del dispositivo (como vibración, cámara, …), y todo ello conociendo únicamente HTML y JavaScript. Un ejemplo de una herramienta que sirve para el embebido de esta web en la aplicación es phonegap. El principal problema de esta forma de hacer las apps es que nunca serán tan buenas como las aplicaciones nativas (más lentas y menos usables, por mucho que se piense lo contrario).

Aquí te dejo un gráfico interesante con información de ello:

app_nativevshybrid

También os dejo una imagen que me ha encantado y que refleja como ninguna a qué problemas nos enfrentamos al escoger una u otra:

Hibrido Vs Nativo

¿Cual será la próxima que escogerás para hacer una aplicación para móviles?

Como hacer un zipalign de un archivo apk

¡Hacía un montón que no escribía! Que verguenza…

Pues el problema de hoy ha sido que he recibido un paquete apk “listo” para subirlo al Google Play y al hacerlo me ha mostrado el siguiente mensaje:

zipalign

 

Como podéis ver aquí el problema es que el archivo no se encuentra alineado.

¿Cómo lo solucioné? Pues simplemente con una línea de código del tipo…

D:\android-sdk\android-sdk\tools>zipalign -f -v 4 "C:\Users\name\Desktop\project_name\projectname_signed.apk" "C:\Users\name\Desktop\project_name\projectname__zipaligned.apk"

La primera de las rutas es donde se encuentra la instalación del android-sdk, la segunda de las rutas donde está el fichero apk no alineado y la tercera donde queremos crear el nuevo apk alineado.

¿Cómo crear un fichero .ipa?

Lo primero es contestar a la pregunta:

¿Qué es un .ipa?

Básicamente es un fichero en el cual se encuentra una aplicación desarrollada para iOS. Sería el .apk de iOS. Y lo que permite es desarrollar una aplicación y después distribuirla entre distintos dispositivos (sin necesidad de subirlo al itunes connect).

¿Cómo se crea un .ipa?

Siguiendo estos pasos:

  1. En Proyecto->Info hay que duplicar la configuración “Release” y llamarla de otra forma, por ejemplo “Ad hoc
  2. En el dispositivo de prueba hay que elegir Dispositivo IOS y a la izquierda duplicar los esquemas y configurar donde pone release por ad hoc.
  3. Seleccionar Product -> Build
  4. Seleccionar Product -> Archive
  5. Abrir el organizer (En el Xcode: Window->Organizer )
  6. Elegir la app que acabamos de archivar y hacer clic sobre Distribute.
  7. En distribute elegir Ad Hoc. Ya tendríamos el .ipa

¿Puedo subir un fichero .ipa al itunes?

Sí se puede si está firmado adecuadamente. Simplemente hay que:

  1. Acceder a itunesconnect.apple.com y descargarse de ahí el Application Loader (En el footer se encuentra un enlace justo debajo de “Deliver Your Apps”).
  2. En el itunes connect indicar que la aplicación está lista para ser subida.
  3. Abrir el Application Loader y seleccionar “Entregar Aplicación”.
  4. Seleccionar la aplicación a subir
  5. Siguiente, siguiente,siguiente,…… y al final enviar (ahí te indicará si tienes algún error o warning evidente en el ipa que te impida subirlo)

Y nada más, espero que sirva de algo 😉

 

Problema con phonegap 2.9 al no encontrar libCordova.a

Un problema que me he encontrado una vez pasado mi proyecto de phonegap 2.9.0 a iOS es que cuando intentaba archivar el proyecto me aparecía este mensaje.
file not found: /Users/admin/…/libCordova.a
clang: error: linker command failed with exit code 1 (use -v to see invocation).

La forma de solucionarlo es la siguiente:

  1. Ir a “project settings” y a la pestaña “Build Settings”, y buscar por “Other Linker Flags”.
  2. Clicar tanto en Debug como en Release y sustituir {TARGET_BUILD_DIR}/libCordova.a por ${BUILT_PRODUCTS_DIR}/libCordova.a
  3. Limpiar y posteriormente volver a archivar.

Diferencias entre MySQL y SQLite. ¿Cuando usar cada uno?

Hoy toca adentrarse en el mundo de las bases de datos debido a que he estado buscando información acerca de qué tipo de base de datos puedo usar en aplicaciones móviles.

La diferencia principal es que MySQL está orientado a servicio mientras que SQLite está orientado a fichero, lo cual significa que MySQL es un servidor que atiende peticiones que se le realizan a un puerto e Ips determinados mientras que SQLLite contiene toda la información en un fichero local.

 

SQLLite

  • Configuración rápida, solo es necesario incluir una librería en la app.
  • Embebido, no es necesario pensar en conexiones
  • Fácilmente testeable
  • No es escalable
  • No tiene usuarios ni permisos
  • No mejora el rendimiento: No optimiza selects, no cachea queries

 

MySQL

  • Escalable: MySQL fácilmente puede crecer si la aplicación usada necesita más.
  • Mejores opciones para mejorar el rendimiento.
  • Tiene permisos de usuarios que es necesario

En el caso de los móviles SQLite es una muy buena opción puesto que no suelen tener las apps muchos datos. En caso de tenerlos y de necesitar una BBDD flexible y que pueda escalarse nos tocará realizar llamadas a Apis desde las cuales solicitar la información a MySQL.

Cómo hacer notificaciones iOS y su script PHP

Aquí os traigo un script en PHP para el envío de notificaciones a un dispositivo iOS.  Tendréis que previamente:

  1. Permitir que la aplicación pueda tener notificaciones. Para el caso de phonegap utilicé este plugin
  2. Generar el archivo ck.pem (Ese archivo ck.pem se generará con una $passphrase determinada). Este paso es el infierno de todos, aquí podéis obtener más información de como realizarlo.
  3. Instalar la aplicación en vuestro dispositivo, os aparecerá un cuadro que preguntará si queréis recibir notificaciones de la aplicación o no.
  4. De alguna forma enviar el ID de vuestro iphone o de vuestro ipad ($deviceToken) a vuestro servidor.
  5. Sustituir las variables $deviceToken y $passphrase así como incluir en vuestro servidor vuestro propio ck.pem

 

 

// Put your device token here (without spaces):
$deviceToken = 'XXXXXXXXXXXXXX';

// Put your private key's passphrase here:
$passphrase = 'XXXXXXXXXXXXXXX';

// Put your alert message here:
$message = 'My first push notification!';

////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
	'ssl://gateway.sandbox.push.apple.com:2195', $err,
	$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
	exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
	'alert' => $message,
	'sound' => 'default'
	);

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
	echo 'Message not delivered' . PHP_EOL;
else
	echo 'Message successfully delivered' . PHP_EOL;

// Close the connection to the server
fclose($fp);

Nota: Como veréis se comunica con el sandbox de apple, con el entorno de pruebas. Al pasar a producción será necesario poner el entorno correspondiente.