Seguridad en Android ocultando api keys
Clase 89 de 96 • Curso Definitivo de Android 2016
Contenido del curso
Creando nuestro entorno de desarrollo
Básicos de Android
Creando Platzigram
- 20

Configurando nuestro tema Material
16:41 min - 21

Widgets de Material Design
10:39 min - 22

Maquetando nuestras vistas del proyecto
14:21 min - 23

¿Qué es un Activity?
22:21 min - 24

Maquetando nuestros Activities
25:19 min - 25

Internacionalización de Textos
11:20 min - 26

Rised button
09:54 min - 27

EditText con Material Design
11:26 min - 28

Terminando el Home de nuestra aplicación
09:17 min - 29

Toolbar
20:30 min - 30

Intents
12:29 min - 31

CardView
07:51 min - 32

Analizando nuestra vistas
07:48 min - 33

Maquetando nuestro CardViewd
29:35 min - 34

Introducción a Fragments
08:37 min - 35

Creando nuestros fragments
21:46 min - 36

Fragments en nuestro BotttomBar
19:13 min - 37

¿Cómo funciona un RecyclerView?
11:44 min - 38

Implemententando RecyclerView
28:43 min - 39

Picasso
05:54 min - 40

Analizando nuestra vista
10:04 min - 41

Collapsing Toolbar Layout, AppBarLayout
26:32 min - 42

Onclick Listener en RecyclerView
11:06 min - 43

Implementando la vista de perfil
15:07 min - 44

Comportamientos dependientes en Material Design
22:48 min - 45

Transiciones en Android.
16:32 min
Conclusiones
Continuando con Platzigram
Arquitectura en Android
- 52

¿Por qué se debe implementar una Arquitectura en Android?
06:40 min - 53

Principios SOLID en Android
05:46 min - 54

¿Qué es y por qué implementar MVP en Android?
05:38 min - 55

MVP en Android un ejemplo sencillo
32:06 min - 56

¿Qué es la arquitectura limpia? Clean Architecture
08:38 min - 57

Platzigram con Clean Architecture creando la entidad Login
14:21 min - 58

Integrando un Presenter e Interactor a Platzigram
10:44 min - 59

Creando un Repository en Platzigram
15:09 min
Accediendo al Hardware en Android
Configuración de Firebase en Android
Gradle en Android
Firebase Authentication en Android
- 67

Cómo funciona Firebase Authentication en Android
13:00 min - 68

Firebase Authentication Correo y Contraseña en Platzigram
21:34 min - 69

Sign In y Sign Out Correo y Contraseña en Platzigram
11:43 min - 70

Configurando Facebook Developers
10:53 min - 71

Implementando Facebook Login en Platzigram
14:00 min - 72

Manejando una sesión en Facebook con Android y Firebase
07:57 min
Almacenamiento en Android
Menús en Android
Firebase Storage en Android
Logcat de Android y Crash Reporting de Firebase
Conexión a Servicios Web con Retrofit en Android
Trabajando con otra API, Medium
Seguridad en Android
Animaciones en Android
Android Things
Publicación en el PlayStore
Contenido complementario
Si tienes una app y en ella tienes implementado cosas como:
- Login con Facebook, Twitter, GitHub o cualquier otra red social
- Mapas de Google
- Alguna API propia que complementa tu aplicación
- Una API de otro propietario
La mayoria delas aplicaciones cuentan con estas carácterísticas y seguramente has notado que en todas te pide un dato como este:
- api_key
- access_token
- token
- etc.
Se ubican con diferentes nombres pero en escencia este dato es una cadena de caracteres alfanumérica única y personalizada que es tu llave de acceso al servicio que estas solicitando, si alguien llega a obtenerla puede tener acceso a tus usuarios e información valiosa que tiene que ver con tu app, por eso es muy importante que no estén accesibles para aquellos usuarios curiosos que de pronto obtienen tu apk (archivo ejecutable de la app) y con procesos de ingeniería inversa, logran decifrar y ver el código fuente de las aplicaciones.
Hoy aprenderemos a implementar una capa de seguridad que mantendrá tus Key's a salvo. Aprenderemos a usar Gradle en Android para mantener aislados del código fuente estos datos.
Normalmente tus api keys estarán almacenadas en el archivo strings.xml o en alguna clase de constantes, si las tienes ahí están vulnerables a ser descubiertas con ingeniería inversa.
gradle.properties
Este archivo lo encontrarás en la sección Gradle Scripts como se muestra en la figura:
Cuando lo abres por primera vez verás algo como esto:
Debajo de todos los comentarios, ahí definirás todas tus api keys pasaremos de esto:
A tenerlo de esta forma:
build.gradle
Ahora el siguiente archivo a editar es el build.gradle que se encuentra a nivel de módulo de la app, es decir el que ves a continación:
Tú sabes que en ese archivo declaramos todas las dependencias, y se define todo o que se incluirá en el archivo ejecutable apk.
Debajo de la primera línea:
apply plugin: 'com.android.application'
Definiremos una variable que accederá a la propiedad que dejamos definida en gradle.properties lo haremos de la siguiente forma:
def FACEBOOK_APP_ID = '"'+FacebookAppId+'"' ?: '"No Token Facebook"';
Lo que estamos diciendo es que a apartir del ++operador terneario++, accedemos al valor de la propiedad si tiene un valor se almacena en la variable FACEBOOK_APP_ID en caso contrario la variable obtiene el valor "No Token Facebook"
Ahora procederemos a inicializar el objeto type con los valores de nuestras api key's como se muestra a continuación:
Si quires que la variable esté disponible como un recurso string utiliza la instrucción:
type.resValue 'string', 'FACEBOOK_APP_ID', FACEBOOK_APP_ID
Pero si quieres que este disponible para ser utilizado en el código Java lo haremos de la siguiente forma:
type.buildConfigField 'String', 'FACEBOOK_APP_ID', FACEBOOK_APP_ID
De tal forma que nuestro código quedará así:
Para que todo cobre vida es necesario que sincronices el proyecto
Para el caso partícular del api key de Facebook este se llama desde el archivo AndroidManifest.xml como un recurso string, notarás que aparece en rojo:
Esto es por que sigue apuntando al recurso que había antes en el strings.xml, ahora lo accederemos a partir del nombre de la variable que está en build.gradle, de la siguiente forma:
Si quieres acceder a la variable desde el código Java lo harás de la siguiente forma:
BuildConfig.FACEBOOK_APP_ID
El resultado lo podrás ver en la consola:
El archivo gradle.properties no se incluye en el apk, por lo tanto tus key's ahora están a salvo.