Gracias! podrias mostrar como abrir una vista en especifico al tocar la notificacion usando jetpack? es necesario que sea con deeplink? o hay otra opcion?
@DevKiper2 күн бұрын
Deeplink es una opción Otra es tener hardcodeado la activity a abrir dentro del PendingIntent
@pedromirandaolea21484 күн бұрын
Hola Martín, un par de preguntas: una vez que consigues a los 20 testers, ¿Dónde estarán registrando o enviando sus opiniones o calificaciones de tu APP cada uno de ellos durante los 14 días que dura la prueba cerrada? y ¿desde donde se estarán enviando dichas calificaciones? Gracias y saludos cordiales.
@DevKiper4 күн бұрын
Las opiniones te la envian por privado, nada queda en el playstore Lo mismo con las calificaciones, ya que es en beta Esas calificaciones no afectan a la calificación que ven los usuarios en el playstore
@pedromirandaolea21483 күн бұрын
@DevKiper entonces las opiniones ¿se envían vía correo electrónico? Saludos
@DevKiper3 күн бұрын
Exactamente!
@jairwatsixd71468 күн бұрын
Hola yo soy un flow
@_AG87 күн бұрын
Uno Hot? 🥵🥵🥵
@DevKiper7 күн бұрын
JAJAJJAA
@jonathanpedrosaazor304214 күн бұрын
se estan aprovechando y abusando de su poder, espero verlos pronto en los tribunales ante un juez por todo el daño que han echo injustamente a los buenos desarrolladores, son una panda de criminales sin escrupulos
@DevKiper14 күн бұрын
Ya perdieron el juicio vs Epic Veremos que va a pasar
@jonathanpedrosaazor304214 күн бұрын
no puedes crear 20 cuentas de google y tener un solo numero de telefono, porque tendrias que tener un numero de telefono diferente para cada cuenta. unos hdp..
@matiasvalenzuela578615 күн бұрын
me eliminaron mi cuenta developer de google por inactividad son unos estafadores los de google
@DevKiper15 күн бұрын
No entiendo porque hacen eso la verdad
@kishorramani00717 күн бұрын
English please
@DevKiper17 күн бұрын
😅😅
@JanderLaffitaOrdunez18 күн бұрын
Muy buena explicación. Muchas veces nos llevamos por lo que esta de moda sin analizar a profundidad los conceptos
@DevKiper17 күн бұрын
Exactamente! No hay que seguir algo, sin analizarlo bien a fondo
@Masycode19 күн бұрын
Nuevo seguidor, estoy iniciando en Jetpack. Saludo desde Rep. DOMINICANA
@DevKiper19 күн бұрын
Genial!! Bienvenido al canal 💪
@richardmichael608721 күн бұрын
en el 13:36, cuando yo lo ejecuto me salta un error que dice que no encuentra implementacion para ProductDatabase.impl y no se que es, he revisado bien el codigo y lo tengo igual a ti, no se si se me ha escapado algo o que puede ser. Es por si pudieras decirme a que se puede deber el error porque me estoy volviendo loco
@DevKiper21 күн бұрын
Buenas! Fijate de tener todas las librerías que mencioné, ya que necesitas el de kapt por ejemplo
@richardmichael608720 күн бұрын
@@DevKiper no puedo creer que no haya caido en eso jajaja y ha sido ponerlo y al instante me ha ido, muchisimas gracias por tu tutorial y por todo!!!
@DevKiper20 күн бұрын
Jaja buenísimo!!
@andonythespinoza799121 күн бұрын
Martin, las palabras no me sirven para expresar mi agradecimiento jajaja. Estoy comenzando a usar los Flows donde puedo, y recientemente me encontré con un freela que envuelve el uso de servicios. A pesar de haber conseguido crear el servicio y entregar el proyecto. Me encantaria si alguna vez puedes hablar sobre servicios en android, actualizar una ui con flows, por ejemplo cuando hacemos una subida de archivos en segundo plano. Se que es bastante complejo, pero eres el mejor explicando!. Muchos exitos y salud para ti
@DevKiper21 күн бұрын
Buenísimo que te estén sirviendo los videos! Lo de descargar en segundo plano, es una buena idea para un video Me lo anoto para futuro 💪
@MrElmarqueli23 күн бұрын
@DevKiper22 күн бұрын
🔥🔥💪💪
@ing_Jefferson28 күн бұрын
Esta disponible en UDEMY?? Saludos desde colombia
@DevKiper28 күн бұрын
Hola! No subo cursos s Udemy, solo a mi plataforma Abrazo,n
@ing_Jefferson27 күн бұрын
@@DevKiper Vale Ing muchas gracias
@DevKiper27 күн бұрын
💪
@ing_Jefferson27 күн бұрын
@@DevKiper 🧑🏽💻🙏🏽
@laondaradio202228 күн бұрын
Amazon AppStore va ser el camino para trabajar con Android ademas de, App Gallery y Gallaxy store.
@AntliaRodriguez-d9t28 күн бұрын
Pero no se puede enviar desde Android?
@DevKiper28 күн бұрын
Podrías enviarlo desde tu propio backend 💪
@andonythespinoza7991Ай бұрын
Me dio mucha risa el sonido del jardinero. Gracias Martin!, yo siempre las encripto con aes y escondo la llave en alguna clase, y uso R8 como pan de cada dia. Si me van a hacer ingenieria reversa que la sufran JAJAJAJAJA. Eso cuando no las divido y se las proveo a la app desde mi backend
@DevKiperАй бұрын
Sisi es mejor tenerlas siempre en backend, o de última, encriptarlas Igualmente acordate que pueden "hookear" tu app y llamar metodos Entonces si tenés un "getApiKey()" ellos podrían llamarla, y tenerla desencriptada Pero si, es mejor encriptar 💪🏽💪🏽
@andonythespinoza7991Ай бұрын
@@DevKiperTe confieso que desconozco ese término jajaja, pero generalmente trato de usar métodos no muy obvios y nombres aleatorios en partes sensibles. Ya eso lo incluyo en documentación privada si alguien debe tocarlo luego
@DevKiperАй бұрын
Te recomiendo buscar "Frida" Es un programa que permite hacer lo que te mencione, y mucho más Muy buena para descubrir vulnerabilidades de tu app
@alexandervado1832Ай бұрын
chavalo lindo
@DevKiperАй бұрын
💪💪💪
@alexandervado1832Ай бұрын
hola amor
@DevKiperАй бұрын
Hola bb
@CarlosmiguelrdАй бұрын
SOY TESTER Y NECESITO TESTER
@DevKiperАй бұрын
Fijate lo que dije, hay un discord dedicado a eso
@lindabaquero6045Ай бұрын
waoooooo al fin entendi esto
@DevKiperАй бұрын
Vamo!! Buenísimo 💪
@berenicenayelimadridrodart1043Ай бұрын
No sé por qué este vídeo tiene tan pocas vistas, son consejos muy valiosos ✨💖
@DevKiperАй бұрын
Muchas gracias 💪
@DevelopersGOАй бұрын
Ya accedi a una que podria hacer analice la app a fondo no encuentro nada malo por ahora
@DevKiperАй бұрын
No entendí
@DevelopersGOАй бұрын
@@DevKiper Accedi a este tipo de trabajo y la app esta publicada
@DevKiperАй бұрын
Pero no está subida en tu cuenta, verdad? Entonces no hay problema
@hbadilla07Ай бұрын
para los que creamos nuestras propias apps obvio que compose y para empresas de desarrollo android obvio xml con appActivity .. en realidad broders y brodars hay que aprender ambas metodologias de android por que hoy por hoy estan coexisitiendo juntas
@maxirodriguez8385Ай бұрын
Muy buen curso y excelente que sea con una aplicacion real y completa!!!
@DevKiperАй бұрын
Gracias Maxi! Sisi el plan era que vean un caso real, y no una app simple que no aporta en nada Buenísimo que te haya gustado!
@Vespaciano-b5pАй бұрын
Oye podrias hacer un video sobre Datastore y Fragments con Jetpack compose ya que en español no hay videos sobre eso o estan desactualzados xd
@DevKiperАй бұрын
Buenísimo Que temas específicos de fragment + Jetpack Compose te gustaría ver?
@luisrobertonavarro7581Ай бұрын
Hola Martin, quería consultarte sobre los 20 testers. Si yo consiguiera los 20 testers reales, ellos para probar la app ¿De donde descargarían la aplicación para probarla?
@DevKiperАй бұрын
Buenas! En tu Play Console (donde subis la app) hay un link que le tendrías que enviar a tus testers Y eso les permite descargar la app
@juguitoifyАй бұрын
El curso ests organizado con clean arquitecture?
@DevKiperАй бұрын
Claramente! Si en mi primer curso de todos, expliqué todo sobre clean architecture En este curso, vamos a usar también esos conocimientos 💪
@juguitoifyАй бұрын
@DevKiper gracias 😊
@juguitoifyАй бұрын
He aprendido mucho con tus videos muchas gracias por todo, saludos de México 😊
@DevKiperАй бұрын
Buenísimo! Abrazo grande 💪
@jhonnysierra1683Ай бұрын
El enlace para comprarlo de, quiero inscribirme esta roto, se queda cargando y termina dando un 502
@DevKiperАй бұрын
Mmmm a la hora de pagar? O cuando? Asi investigo
@jhonnysierra1683Ай бұрын
@@DevKiper Al dar click, carga la pagina, le das click en quiero inscribirme y se queda cargando luego da el 502, estoy en colombia, por si tiene que ver la region/pais
@DevKiperАй бұрын
Fijate ahora si se solucionó porfa
@SABIGNYАй бұрын
Me parece genial el curso, ya mismo al adquiero, gracias.
@DevKiperАй бұрын
Crack! Nos vemos dentro del curso 💪💪
@yeraydenizАй бұрын
Hola, Martin. Quiero probar los vídeos gratuitos para ver qué tal están pero... siempre que pico en uno gratuito me sale la pantalla de pago.
@DevKiperАй бұрын
Que video estás queriendo ver? Asi puedo solucionarlo
@yeraydenizАй бұрын
@@DevKiper En el vídeo estás promocionando un curso. En el curso hay vídeos gratuitos. Esos vídeos.
@yeraydenizАй бұрын
@@DevKiper No sé que ha pasado pero ya está solucionado, gracias y perdona por ser tan pelotudo.
@DevKiperАй бұрын
Buenísimo que ya te funcionen!
@andresvaca3884Ай бұрын
Loco vine buscando cobre y encontre oro, excelente trabajo
@DevKiperАй бұрын
Buenísimo que te sirva Andres! Cualquier duda, me avisas Abrazo!
@gonsebmedinaАй бұрын
Es muy lento y tarda mucho la primera carga ademas de agregarle megas extras a la app.... no gracias ... me quedo con xml
@DevKiperАй бұрын
Mm? En ningun lado tarda más la carga Y no te agrega megas a tus apps Te fijaste el build firmado? Pesan prácticamente lo mismo 💪
@alex8gp5Ай бұрын
😑con razon existen los Black hats 🤔siempre veo que les cierran las puertas a los de bajos recursos 🤔
@DevKiperАй бұрын
😅
@VincenzoRavoАй бұрын
Hola, el video esta excelente, pero tengo un problema cuando intento agregar "id 'kotlin-kapt'" al gradle, en la seccion de plugins, ahora gradle tiene otro formato, me puedes dar una idea de como deberia corregir esa linea para el formato nuevo del gradle?
@DevKiperАй бұрын
Buenas! Si no me equivoco, tenés que usarlo asi: kotlin("kapt")
@VincenzoRavoАй бұрын
@@DevKiper Muchas gracias!
@CristianCelis-s7rАй бұрын
Habia escuchado el uso de EncryptedSharedPreference (creo que particularmente al almacenar Tokens), me podrias confirmar si en este caso de proteger se podria usar o en cuales? Thxx
@DevKiperАй бұрын
El encryptedsharedprefs se usa más que nada para encriptar información sensible en el celular del usuario Ejemplo: Access tokens Personalmente no lo uso para apikeys
@saries2009Ай бұрын
Pero es justo al revés, con Jetpack compose serás un veterano y sabrás mucho de él para cuando en un futuro no muy lejano (por lo rápido que avanza la tecnología) sea lo que más se use, ya que incluso el propio google lo recomienda. En mi opinión. Un saludo!
@DevKiperАй бұрын
La mayoría de apps (+90%) sigue usando xml. Yo enseño Compose y todo, pero hay que entender la realidad también Presente= xml Futuro= compose
@reloadersystem4873Ай бұрын
Entonces mi equipo puede tener programadores con Kotlin xml, otro con jetPackcompose ?
@DevKiperАй бұрын
Exactamente, sin problema 💪
@DevKiper2 ай бұрын
Te espero en: androidavanzado.com/cicd Abrazo!
@raulsipaque27432 ай бұрын
Excelente vídeo, es el mejor que he encontrado con ruta para android nativo. Sin embargo quería preguntarte algo: esta misma ruta aplica si quiero aprender kotlin multiplatform o cambian algunas cosas? realmente no lo sé y si me puedes ayudar te lo agradecería. Saludos
@DevKiper2 ай бұрын
Exactamente la misma ruta, solamente le agregaría KMP al final Es importante que sepas lo básico de Android antes de hacer KMP 💪
@PieroNonalaya2 ай бұрын
Hola, fue muy interesante tu video, Estoy en las Pruebas cerradas y ya habiendo creado 10 cuentas de gmail y usando cuentas personales. Con un celular hice como 20 comentarios de 5 estrellas en cada una de las cuentas y a los días solo estaba el comentario de una cuenta personal pero desde otro celular. Porque me habrían eliminado los comentarios si estaban desde otras cuentas?
@DevKiper2 ай бұрын
Las reseñas de pruebas cerradas no suman como reseña oficial
@Neurobots2 ай бұрын
Vaya políticas! Pero.. podrás seguir desarrollando en Android Studio e instalar "por fuera" tu APK en cualquier versión nueva de Android sin tener que subir la App al PlayStore? Vamos, temporalente solo para pasar de la creación de la cuenta de Console. Me imagino que sí, porque uno podría subir su App a su sitio Web comercial y que los clientes la descarguen e instalen desde ahí. A menos que Google firme las Apps para autorizar su instalación y en un momento dado la que no tenga esa "firma" no podrá ser instalada. Saludos Master!
@DevKiper2 ай бұрын
Sisi eso se puede, pero solo sirve si tus clientes descargan de tu página Y en cada actualización van a tener que manualmente descargar de nuevo La solución ahí es agregar a tus clientes como tester, y listo
@pablojoseoroz2 ай бұрын
Sin duda en el init siempre, además así pa cuando se cargue la pantalla es posible q ya estén los datos preparados y ni se vea el loading
@DevKiper2 ай бұрын
Esa para mí es la ventaja principal que tiene, por sobre el resto Y nadie lo menciona Yo quiero llamar a la api ANTES de que cargue la pantalla al 100%, asi el usuario espera menos tiempo
@guillermoeliasromonoriega13822 ай бұрын
por mas videos como estos :)
@DevKiper2 ай бұрын
Me encantaría, pero llevan demasiado tiempo Por eso tengo mis streams (fijate en el canal) o incluso el curso 💪
@devexpert_io2 ай бұрын
¡Hola Martin! Te vuelvo a escribir el mensaje que desapareció. En el link que te enviaba (si quieres lo puedes pegar tú por referencia) Ian Lake da respuesta a muchas de las preguntas de por qué stateIn es la mejor opción. Pero ahí van mis comentarios al respecto: Hay que partir de la base de que tu código aquí es muy simple, y que por tanto no van a surgir ninguno de los problemas que sí que ocurrirían en un caso más complejo, y surgen otros de los que no debería darse el caso. Por ejemplo, todo lo que hagas en el init, con con el stateIn Eagerly, va a estar ejecutándose independientemente de que la App esté en segundo plano. Imagina una situación en la que tienes un Flow que está pidiendo periódicamente datos a un backend para actualizar la UI. Independientemente de que esa pantalla no se vea, porque hayamos navegado o porque estemos en segundo plano, el servicio se va a seguir llamando para actualizar datos que no se ven. El problema que comentas con stateIn WhileSubscribed solo ocurre porque este ejemplo no tiene persistencia local. Pero cualquier App Android que se precie la necesita, y al volver a suscribirse simplemente haría una petición a la base de datos para repintar. El usuario ni lo vería. En los tests, vuelve a pasar lo mismo. En este test no tienes problemas porque es un caso sencillo. El mayor problema que yo le veo a los tests es que si usas el init o el eagerly, no puedes inicializar el VM en el setUp, porque en cuanto que lo hagas, los datos iniciales de los mocks/fakes contaminan el valor del stateFlow, no puedes inicializarlos en cada test con los valores que necesites para esa prueba concreta. Es un problema salvable haciendo la inicialización del VM en cada test en lugar del setup. Pero en general lo que veo es que defiendes una postura basada en un ejemplo muy simple para el que casualmente tu tesis valida. Es verdad que tanto el init como el resto de opciones pueden funcionar bien en casos concretos. Pero la solución que, con persistencia local, funciona bien en todos los casos es el stateIn con WhileSubscribed, y por eso es la que se recomienda. En otro orden de cosas, ya más a nivel de diseño de software, el constructor de una clase debería ser rápido, dedicarse exclusivamente a inicializar el objeto, y no tener side-effects que puedan dejar el objeto en un estado inconsistente (por ejemplo que el Flow retorne antes de que acabe el constructor). Pero esto se puede dejar más del lado del "purismo", que puedes compartir o no. ¡Espero que sea de ayuda! Y gracias por tu mención y por la reflexión del vídeo.
@DevKiper2 ай бұрын
Antonio! Buenisimo verte por el canal 💪 Respondo un poco a lo que mencionas: "Imagina una situación en la que tienes un Flow que está pidiendo periódicamente datos a un backend para actualizar la UI. Independientemente de que esa pantalla no se vea, porque hayamos navegado o porque estemos en segundo plano, el servicio se va a seguir llamando para actualizar datos que no se ven." Ese es un caso muy bueno, y que definitivamente no funcionaría al 100% con el init, asi que si, 100% habría que hacer uso del WhileSubscribed. "El problema que comentas con stateIn WhileSubscribed solo ocurre porque este ejemplo no tiene persistencia local. Pero cualquier App Android que se precie la necesita, y al volver a suscribirse simplemente haría una petición a la base de datos para repintar. El usuario ni lo vería." Lo de WhileSubscribed, por más de que tengas persistencia local, vas a tener el mismo problema, ya que como dijiste "al volver a suscribirse simplemente haría una petición a la base de datos para repintar". Estás llamando a la base de datos nuevamente cuando no tendría que hacer falta. Es verdad que eso no afecta realmente en la performance del usuario ni nada de eso. Pero sigo sin verle mucho el sentido a tener que llamar de nuevo a la base de datos. Yo trabajé en apps donde haciamos cosas que no tienen sentido guardar de manera local (ej: Una app de pagos, no tiene sentido guardar local si cuando no hay internet, no hay forma de pagar). No le veo mucha ventaja a crear un sistema de caché solo para 1 api, simplemente para evitar que el WhileSubscribed llame de nuevo a la api. "El mayor problema que yo le veo a los tests es que si usas el init o el eagerly, no puedes inicializar el VM en el setUp, porque en cuanto que lo hagas, los datos iniciales de los mocks/fakes contaminan el valor del stateFlow" Fijate que en test que yo mostré, lo tengo inicializado al viewmodel en el setup y no hubo problema. Empieza a haber problema cuando se agrega la librería que mencioné "El constructor de una clase debería ser rápido, dedicarse exclusivamente a inicializar el objeto, y no tener side-effects que puedan dejar el objeto en un estado inconsistente (por ejemplo que el Flow retorne antes de que acabe el constructor). Pero esto se puede dejar más del lado del "purismo", que puedes compartir o no." 100% de acuerdo, pero yo lo aplico generalmente en clases de datos donde cargo información En casos como por ejemplo el ViewModel, creo que uno ya está acostumbrado y se da cuenta que no hace falta seguir las reglas tan a raja tabla No soy muy purista ni nada, ya que siento que en el mundo de la programación hay 19270125 formas distintas de programar, y que todas llevan al mismo resultado Soy más fan de que cada uno de su propia opinión, y después que cada uno use la opción que más le guste Por eso sigo usando el init, ya que personalmente nunca le encontré ningún problema Me encanta que hayan distintas opiniones sobre el tema, ya que nos permite a todos aprender del resto Abrazo enorme, y espero que algún dia podamos hacer algo juntos 💪
@devexpert_io2 ай бұрын
@@DevKiper en una App sin persistencia, podría tener sentido plantearse no usar el WhileSuscribed(), pero quizá puedes montar una caché en memoria. Depende mucho del caso, sin duda, habría que estudiar el caso concreto. Con respecto al test, en tu caso funciona porque solo es un test y no estás dando distintos valores de inicialización al repositorio. Es a lo que me refiero, que en una suite de tests completa, no funcionaría hacerlo en el setUp. Dejando de lado lo que comentas, al añadir la librería, ahí no me he parado mucho a ver qué pasa. ¡Gracias por tu respuesta! Saludos!
@javierquirozgalindo6642 ай бұрын
Tremendo video con esto murió recycler view jajaja gracias!!
@DevKiper2 ай бұрын
Obvio! Una vez que se aprende esto, ya no se vuelve más a recyclerview jajaja
@zafa60322 ай бұрын
Genial video! Me encantó! Atte. El Salmón!
@DevKiper2 ай бұрын
Crack Zafa 💪
@zafa60322 ай бұрын
@@DevKiper Creo que el mejor camino es a contracorriente jajaja
@ANDRESXX10002 ай бұрын
yo siempre uso el init para ese tipo de cosas para cargar y mostrar el loading, si me ah pasado que en los test tengo problemas con el init
@DevKiper2 ай бұрын
Pero realmente te afecta negativamente eso de los tests? Porque nunca me pasó de realmente necesitar la info antes del init
@ANDRESXX10002 ай бұрын
@@DevKiper no se puede ser que aun soy muy novato en test, pero los que he hecho los test al viewmodel cuando tienen los init me bloquean
@Vespaciano-b5p2 ай бұрын
Muy bueno, aunque metele ZOOM amigo, no se ve el código
@DevKiper2 ай бұрын
Buenas! En los videos más nuevos ya tenemos zoom Voy a ver de rehacer este video a futuro 💪 Mol gracias por el feedback