
Probablemente, muchas personas pensaron en cómo realizar su conocimiento en el producto terminado. Alguien más, alguien menos tiempo dedicado a ello. Quiero compartir con la comunidad mi experiencia y visión de cómo hacer esto correctamente, pero no siempre funciona.
Busca una idea
En esta etapa, debemos decidir qué crearemos.
Para hacer esto, generar ideas, escribirlas (por ejemplo, en trello), hacer una revisión de los competidores: google y buscar en la tienda de aplicaciones.

Luego tratamos de evaluar sobriamente nuestras capacidades tanto en términos de tiempo, posibles inversiones financieras y de acuerdo con el conocimiento necesario. Es decir hacer un asesino de Eventbrite o Uber no sería una buena idea.
Investigación
Se dividen en cualitativos y cuantitativos, como estudios de mercado, pruebas A / B, análisis, encuestas. Para probar su idea a nivel de un proyecto de vivienda, las más accesibles son las encuestas.
Elegí la idea de un recordatorio de un colchón de golpe, porque Yo duermo sobre él, y el niño salió de la cuna y también se mudó a su cama.
En la encuesta, lo principal es plantear correctamente la pregunta; no debe contener una pista o ser sesgada. Preferentemente preciso y conciso.
No es cierto: ¿con qué frecuencia se voltea un colchón?
Cierto: ¿Estás volteando el colchón?
Nunca pregunte al encuestado si usará algo: "¿Utilizará la aplicación que recuerda un vuelco de colchón?"
En la mayoría de los casos, recibirá una respuesta positiva falsa.
Entrevistaron a 10 personas en el trabajo, 4 personas dijeron que dieron la vuelta al colchón y no recordaron exactamente cuándo debería hacerse la próxima vez y en qué dirección girar. No es el mejor resultado, pero el 40% ya es algo. Yo decido hacer
La investigación cualitativa consiste en
Prueba de UX
La forma más fácil y asequible es dibujar todas las pantallas en papel y crear prototipos en la aplicación Marvel o, si tiene experiencia, en figma: estas herramientas le permiten crear un prototipo funcional de la aplicación sin programación, resaltando las áreas activas de la pantalla (botones) y describiendo pantalla que debería abrirse.
Desarrollo del cliente
Este método tiene como objetivo identificar el problema o las necesidades del cliente antes de que comience el desarrollo. Consiste en compilar los cuestionarios correctos y realizar entrevistas.
Este método ayuda a formular la relevancia de la aplicación.
Para crear un prototipo de la interfaz, me limité a dibujar pantallas en calcomanías y animarlas de maravilla. Después de lo cual le pidió a su colega en el trabajo que corriera por las pantallas y compartiera sus impresiones.
Descripción de la idea.

Con base en los estudios anteriores, estamos tratando de responder las preguntas:
¿Qué beneficios trae la aplicación?
Ayuda a las personas que se preocupan por su salud a usar un colchón que funcione por más tiempo.
¿Qué problemas resuelve?
Te recuerdo sobre un golpe de estado.
Recordando discretamente.
Comprende por qué necesitas girar.
Comprenda exactamente cómo voltear, no rompa nada y no rompa al mismo tiempo.
Comprende cómo elegir un colchón.
Averigüe cuándo es necesario cambiar el colchón (5-10 años).
Cómo limpiar el colchón en una emergencia (derramado, manchado, etc.).
¿En qué situaciones se usa?
En la tienda, el vendedor muestra cómo entregar.
Quieres darle la vuelta en casa.
En el trabajo, debes voltear regularmente.
Ha ocurrido una emergencia.
Decidir un mínimo de funcionalidad que haga posible el lanzamiento
MVP
La lista de colchones, un recordatorio de golpe, autorización para transferir el historial (el colchón dura más que el teléfono), una breve instrucción.
Implementación
Aquí quiero contar brevemente sobre las tecnologías utilizadas.
El reino fue elegido como la base de datos debido a mi conocimiento de larga data, así como a las características convenientes fuera de la caja, como la presencia de métodos asíncronos de escritura / lectura y un buen rendimiento.
adquisición asincrónica de datos del Reinopublic RealmResults<RealmModelMattress> getAllMattressAsync(){ realm = getRealm(); return realm.where(RealmModelMattress.class) .equalTo("deleted", false) .sort("id", Sort.ASCENDING) .findAllAsync(); } private Realm getRealm() { if (mConfig==null) { mConfig = new RealmConfiguration.Builder() .build(); } realm = mRealm.get(); if (realm == null) { try { realm = Realm.getInstance(mConfig); mRealm.set(realm); } catch (Exception e) { closeConnection(); Realm.deleteRealm(mConfig); realm = Realm.getInstance(mConfig); mRealm.set(realm); } } return realm; }
Además, la facilidad de mostrar datos en recyclerView cuando cambian: solo conecte RealmChangeListener:
conectar RealmChangeListener private RealmChangeListener<RealmResults<RealmModelMattress>> realmChangeListener = data->{ refreshData(data); };
Para eliminar elementos, recyclerView utiliza ItemTouchHelper, aquí está escrito con suficiente detalle sobre su uso.
Es suficiente crear una clase que extienda ItemTouchHelper.SimpleCallback y describa las acciones que deberían ocurrir al deslizar (onSwiped) o al mover (onMove).
Y conéctelo al reciclador:
conecte SwipeToDeleteCallback a la vista del reciclador rv = view.findViewById(R.id.recyclerViewMattress); rv.setLayoutManager(new LinearLayoutManager(context)); adapter = new MattressListAdapter(data, clickListener, getContext()); rv.setAdapter(adapter); ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(adapter)); itemTouchHelper.attachToRecyclerView(rv);
Las notificaciones locales sobre la necesidad de volcar el colchón se implementan a través del administrador de notificaciones, ya que actualmente es uno de los métodos más correctos y aprobados por Google para crear alertas.
enviando notificaciones private void sendNotification(String title, String text, int id) { String DBEventIDTag= "Mattress" + id; int DBEventID = id; Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(DBEventIDTag, DBEventID); PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0); NotificationManager notificationManager = (NotificationManager)getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel("default", "Default", NotificationManager.IMPORTANCE_DEFAULT); Objects.requireNonNull(notificationManager).createNotificationChannel(channel); } NotificationCompat.Builder notification = new NotificationCompat.Builder(getApplicationContext(), "default") .setContentTitle(title) .setContentText(text) .setContentIntent(pendingIntent) .setSmallIcon(R.mipmap.ic_launcher) .setAutoCancel(true); Objects.requireNonNull(notificationManager).notify(id, notification.build()); }
La autorización en la aplicación se realiza de 2 maneras:
Puede especificar su correo e ingresar una contraseña: la cuenta correspondiente se creará en el servidor y los datos de la aplicación sobre colchones y la hora del golpe se le adjuntarán. Eso brinda la oportunidad de obtenerlos iniciando sesión en la aplicación, después de cambiar el teléfono.
El segundo método de autorización: Facebook, utilizando su API.
Para implementar este método, lo primero que debe hacer es registrar su aplicación en Facebook , implementar la verificación de token de acceso en el servidor https://graph.facebook.com/me?fields=id&access_token=accToken , donde id es el identificador de usuario de Facebook y accToken Token de acceso temporal que confirma que esta es realmente la misma persona que envió una solicitud de autorización.
Publicar resultado
Crea una cuenta de desarrollador.
Pagamos una tarifa de registro de $ 25 por única vez.
Publicamos la aplicación Voltee el colchón .
Determinamos la calificación del contenido, el costo y la distribución (aquellos países donde la aplicación estará disponible). Como la aplicación está localizada para dos idiomas, hacemos 2 descripciones en ruso e inglés, así como capturas de pantalla.
Espero que sea útil para alguien que no se desvíe y logre el objetivo.