Tengo una aplicación que quiero lanzar al mercado como una aplicación de pago. Me gustaría tener otra versión que sería una versión de "prueba" con un límite de tiempo de, digamos, 5 días.
¿Cómo puedo hacer esto?
Tengo una aplicación que quiero lanzar al mercado como una aplicación de pago. Me gustaría tener otra versión que sería una versión de "prueba" con un límite de tiempo de, digamos, 5 días.
¿Cómo puedo hacer esto?
Respuestas:
Actualmente, la mayoría de los desarrolladores logran esto utilizando una de las siguientes 3 técnicas.
El primer enfoque se evita fácilmente, la primera vez que ejecuta la aplicación, guarde la fecha / hora en un archivo, base de datos o preferencias compartidas y cada vez que ejecute la aplicación después de eso, verifique si el período de prueba ha finalizado. Esto es fácil de eludir porque desinstalar y reinstalar le permitirá al usuario tener otro período de prueba.
El segundo enfoque es más difícil de eludir, pero aún así eludible. Utilice una bomba de tiempo codificada de forma rígida. Básicamente, con este enfoque, se codificará una fecha de finalización para la prueba, y todos los usuarios que descarguen y usen la aplicación dejarán de poder usar la aplicación al mismo tiempo. He utilizado este enfoque porque es fácil de implementar y, en su mayor parte, simplemente no tenía ganas de pasar por el problema de la tercera técnica. Los usuarios pueden eludir esto cambiando manualmente la fecha en su teléfono, pero la mayoría de los usuarios no se tomarán la molestia de hacer tal cosa.
La tercera técnica es la única forma que he escuchado de poder realmente lograr lo que quieres hacer. Tendrá que configurar un servidor, y luego, cada vez que se inicia su aplicación, su aplicación envía el identificador único del teléfono al servidor. Si el servidor no tiene una entrada para esa identificación de teléfono, entonces crea una nueva y anota la hora. Si el servidor tiene una entrada para la identificación del teléfono, entonces hace una simple verificación para ver si el período de prueba ha expirado. Luego, comunica los resultados de la verificación de vencimiento de la prueba a su aplicación. Este enfoque no debe ser evitable, pero requiere la configuración de un servidor web y demás.
Siempre es una buena práctica realizar estas comprobaciones en onCreate. Si el vencimiento ha finalizado, aparecerá un AlertDialog con un enlace de mercado a la versión completa de la aplicación. Solo incluya un botón "Aceptar" y, una vez que el usuario haga clic en "Aceptar", haga una llamada a "finalizar ()" para finalizar la actividad.
fuente
Desarrollé un SDK de prueba de Android que simplemente puede colocar en su proyecto de Android Studio y se encargará de toda la administración del lado del servidor por usted (incluidos los períodos de gracia fuera de línea).
Para usarlo, simplemente
Agregue la biblioteca a su módulo principal
build.gradle
Inicialice la biblioteca en el
onCreate()
método de su actividad principalAgregue un controlador de devolución de llamada:
Para iniciar una prueba, llame a la
mTrialy.startTrial("YOUR_TRIAL_SKU", mTrialyCallback);
clave de su aplicación y encontrará el SKU de prueba en el panel de control del desarrollador de Trialy .fuente
Esta es una vieja pregunta, pero de todos modos, tal vez esto ayude a alguien.
En caso de que desee optar por el enfoque más simplista (que fallará si la aplicación se desinstala / reinstala o el usuario cambia la fecha del dispositivo manualmente), así es como podría ser:
fuente
getTime
no lo esgetTimeInMillis
.Esta pregunta y la respuesta de snctln me inspiraron a trabajar en una solución basada en el método 3 como mi tesis de licenciatura. Sé que el estado actual no es para uso productivo, ¡pero me encantaría saber lo que piensas al respecto! ¿Usarías un sistema así? ¿Le gustaría verlo como un servicio en la nube (sin problemas para configurar un servidor)? ¿Preocupado por problemas de seguridad o razones de estabilidad?
Tan pronto como termine el trámite de licenciatura quiero seguir trabajando en el software. ¡Así que ahora es el momento de que necesito tus comentarios!
El código fuente está alojado en GitHub https://github.com/MaChristmann/mobile-trial
Alguna información sobre el sistema: - El sistema tiene tres partes, una biblioteca de Android, un servidor node.js y un configurador para administrar múltiples aplicaciones de prueba y cuentas de editor / desarrollador.
Solo admite pruebas basadas en el tiempo y usa su cuenta (Play Store u otra) en lugar de una identificación de teléfono.
Para la biblioteca de Android, se basa en la biblioteca de verificación de licencias de Google Play. Lo modifiqué para conectarme al servidor node.js y, además, la biblioteca intenta reconocer si un usuario cambió la fecha del sistema. También almacena en caché una licencia de prueba recuperada en Preferencias compartidas cifradas con AES. Puede configurar la hora válida de la caché con el configurador. Si un usuario "borra datos", la biblioteca forzará una verificación del lado del servidor.
El servidor utiliza https y también firma digitalmente la respuesta de verificación de licencia. También tiene una API para aplicaciones y usuarios de prueba de CRUD (editor y desarrollador). De manera similar a la biblioteca de verificación de licencias, los desarrolladores pueden probar la implementación de su comportamiento en la aplicación de prueba con el resultado de la prueba. Por lo tanto, en el configurador puede establecer explícitamente la respuesta de su licencia en "con licencia", "sin licencia" o "error del servidor".
Si actualizas tu aplicación con una nueva característica espectacular, es posible que desees que todos puedan volver a intentarlo. En el configurador, puede renovar la licencia de prueba para usuarios con licencias vencidas configurando un código de versión que debería activarlo. Por ejemplo, el usuario está ejecutando su aplicación en el código de versión 3 y desea que pruebe las funciones del código de versión 4. Si actualiza la aplicación o la reinstala, puede usar el período de prueba completo nuevamente porque el servidor sabe en qué versión la probó por última vez. hora.
Todo está bajo la licencia Apache 2.0
fuente
El mas facil y mejor forma de hacerlo es implementar BackupSharedPreferences.
Las preferencias se conservan, incluso si la aplicación se desinstala y se vuelve a instalar.
Simplemente guarde la fecha de instalación como preferencia y estará listo.
Aquí está la teoría: http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html
Aquí está el ejemplo: La copia de seguridad de preferencias compartidas de Android no funciona
fuente
Método 4: utilice el tiempo de instalación de la aplicación.
Desde el nivel de API 9 (Android 2.3.2, 2.3.1, Android 2.3, GINGERBREAD) hay firstInstallTime y lastUpdateTime en
PackageInfo
.Para leer más: Cómo obtener el tiempo de instalación de la aplicación desde Android
fuente
Ahora, en la versión reciente de la suscripción de prueba gratuita de Android que se ha agregado, puede desbloquear todas las funciones de su aplicación solo después de comprar la suscripción dentro de la aplicación para un período de prueba gratuito. Esto permitirá al usuario usar su aplicación durante un período de prueba, si la aplicación aún se desinstala después del período de prueba, se le transferirá el dinero de la suscripción. No lo he intentado, solo comparto una idea.
Aquí está la documentación
fuente
En mi opinión, la mejor manera de hacer esto es simplemente usar Firebase Realtime Database:
1) Agregue soporte de Firebase a su aplicación
2) Seleccione 'Autenticación anónima' para que el usuario no tenga que registrarse o incluso saber lo que está haciendo. Se garantiza que esto se vinculará a la cuenta de usuario actualmente autenticado y, por lo tanto, funcionará en todos los dispositivos.
3) Utilice la API de Realtime Database para establecer un valor para 'installed_date'. En el momento del lanzamiento, simplemente recupere este valor y utilícelo.
Yo he hecho lo mismo y funciona muy bien. Pude probar esto a través de desinstalaciones / reinstalaciones y el valor en la base de datos en tiempo real sigue siendo el mismo. De esta manera, su período de prueba funciona en varios dispositivos de usuario. Incluso puede versionar su install_date para que la aplicación 'restablezca' la fecha de prueba para cada nueva versión principal.
ACTUALIZAR : Después de probar un poco más, parece que Firebase anónimo parece asignar una ID diferente en caso de que tenga diferentes dispositivos y no está garantizado entre reinstalaciones: / La única forma garantizada es usar Firebase pero vincularlo a su google cuenta. Esto debería funcionar, pero requeriría un paso adicional donde el usuario primero necesita iniciar sesión / registrarse.
Hasta ahora, he terminado con un enfoque un poco menos elegante de simplemente verificar las preferencias respaldadas y una fecha almacenada en las preferencias al instalar. Esto funciona para aplicaciones centradas en datos donde no tiene sentido que una persona vuelva a instalar la aplicación y vuelva a ingresar todos los datos agregados anteriormente, pero no funcionaría para un juego simple.
fuente
Después de ver todas las opciones en este y otros hilos, estos son mis hallazgos.
Preferencias compartidas, base de datos Puede borrarse en la configuración de Android, perderse después de reinstalar una aplicación. Se puede hacer una copia de seguridad con el mecanismo de copia de seguridad de Android y se restaurará después de una reinstalación. Es posible que la copia de seguridad no siempre esté disponible, aunque debería estar en la mayoría de los dispositivos
Almacenamiento externo (escribir en un archivo) No se ve afectado por un borrado de la configuración o una reinstalación si no escribimos en el directorio privado de la aplicación . Pero: requiere que le pidas permiso al usuario en tiempo de ejecución en las versiones más nuevas de Android, por lo que probablemente solo sea factible si necesitas ese permiso de todos modos. También se puede hacer una copia de seguridad.
PackageInfo.firstInstallTime se restablece después de una reinstalación pero es estable en todas las actualizaciones
Iniciar sesión en alguna cuenta No importa si es su cuenta de Google a través de Firebase o una en su propio servidor: la versión de prueba está vinculada a la cuenta. Crear una nueva cuenta restablecerá la prueba.
Inicio de sesión anónimo en Firebase Puede iniciar sesión con un usuario de forma anónima y almacenar sus datos en Firebase. Pero aparentemente una reinstalación de la aplicación y tal vez otros eventos indocumentados pueden darle al usuario una nueva identificación anónima , restableciendo su tiempo de prueba. (Google mismo no proporciona mucha documentación sobre esto)
ANDROID_ID Puede no estar disponible y puede cambiar bajo ciertas circunstancias , por ejemplo, restablecimiento de fábrica. Las opiniones sobre si es una buena idea usar esto para identificar dispositivos parecen diferir.
Play Advertising ID Puede ser restablecido por el usuario. El usuario puede inhabilitarlo si se excluye del seguimiento de anuncios.
InstanceID Reset en una reinstalación . Reiniciar en caso de un evento de seguridad. Puede ser restablecido por su aplicación.
Qué (combinación de) métodos funcionan para usted depende de su aplicación y de cuánto esfuerzo cree que el John promedio pondrá para obtener otro período de prueba. Recomendaría evitar el uso solamente el anonimato Firebase y el ID de publicidad debido a su inestabilidad. Un enfoque multifactorial parece que dará los mejores resultados. Los factores que están disponibles para usted dependen de su aplicación y sus permisos.
Para mi propia aplicación, encontré que las preferencias compartidas + firstInstallTime + copia de seguridad de las preferencias es el método menos intrusivo pero también lo suficientemente efectivo. Debe asegurarse de solicitar una copia de seguridad solo después de verificar y almacenar la hora de inicio de la prueba en las preferencias compartidas. Los valores de las preferencias compartidas deben tener prioridad sobre firstInstallTime. Luego, el usuario tiene que reinstalar la aplicación, ejecutarla una vez y luego borrar los datos de la aplicación para restablecer la versión de prueba, que es bastante trabajo. Sin embargo, en dispositivos sin un transporte de respaldo, el usuario puede restablecer la versión de prueba simplemente reinstalando.
He hecho que ese enfoque esté disponible como una biblioteca extensible .
fuente
Por definición, todas las aplicaciones de pago de Android en el mercado se pueden evaluar durante 24 horas después de la compra.
Hay un botón 'Desinstalar y reembolsar' que cambia a 'Desinstalar' después de 24 horas.
¡Yo diría que este botón es demasiado prominente!
fuente
Me encuentro con esta pregunta mientras busco el mismo problema, creo que podemos utilizar la API de fecha gratuita como http://www.timeapi.org/utc/now o alguna otra API de fecha para verificar la caducidad de la aplicación de seguimiento. de esta manera es eficiente si desea entregar la demostración y está preocupado por el pago y requiere una demostración de tenencia fija. :)
encuentra el código a continuación
su solución de trabajo .....
fuente
Así es como hice el mío, creé 2 aplicaciones, una con actividad de prueba y la otra sin,
Cargué el que no tenía actividad de prueba en Play Store como aplicación paga,
y el que tiene actividad de prueba como aplicación gratuita.
La aplicación gratuita en el primer lanzamiento tiene opciones de prueba y compra en la tienda, si el usuario selecciona la compra en la tienda, se redirige a la tienda para que el usuario compre, pero si el usuario hace clic en prueba, lo lleva a la actividad de prueba.
NB: utilicé la opción 3 como @snctln pero con modificaciones
Primero , no dependí de la hora del dispositivo, obtuve mi tiempo del archivo php que hace el registro de prueba en la base de datos,
en segundo lugar , utilicé el número de serie del dispositivo para identificar de forma única cada dispositivo,
Por último , la aplicación depende del valor de tiempo devuelto por la conexión del servidor, no de su propio tiempo, por lo que el sistema solo se puede eludir si se cambia el número de serie del dispositivo, lo cual es bastante estresante para el usuario.
así que aquí va mi código (para la actividad de prueba):
Mi archivo php se ve así (es una tecnología REST-slim):
luego, en la actividad principal, uso la preferencia compartida (installDate creada en la actividad de prueba) para monitorear la cantidad de días restantes y, si los días terminaron, bloqueo la interfaz de usuario de la actividad principal con un mensaje que los lleva a la tienda para comprar.
El único inconveniente que veo aquí es que si un usuario de Rogue compra la aplicación paga y decide compartirla con aplicaciones como Zender, compartir archivos o incluso alojar el archivo apk directamente en un servidor para que la gente lo descargue gratis. Pero estoy seguro de que pronto editaré esta respuesta con una solución a eso o un enlace a la solución.
Espero que esto salve un alma ... algún día
Codificación feliz ...
fuente
@snctln opción 3 de puede hacer fácilmente agregando un archivo php a un servidor web con php y mysql instalados como muchos de ellos tienen.
Desde el lado de Android, se pasa un identificador (la ID del dispositivo, la cuenta de Google o lo que quieras) como argumento en la URL usando HttpURLConnection y el php devuelve la fecha de la primera instalación si existe en la tabla o inserta una nueva fila y devuelve la fecha actual.
Funciona bien para mí.
¡Si tengo tiempo, publicaré algún código!
Buena suerte !
fuente