SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Workshop:

Integración de Social Media en
            Android
       Appcircus Academy
          Alberto Alonso Ruibal
       alberto.ruibal@mobialia.com
       T: @mobialia @albertoruibal
Quién soy
Ingeniero de Telecomunicación
                    System Manager
                    J2EE Developer
Desarrollador Android @ Mobialia
        Mobialia Chess, Internet Chess Club App
   Gasolineras España, Connect-4, Trivial, Slot Racing
              Martin Varsavsky's RadioMe
             Track my Followers for Twitter
Mi blog: http://www.alonsoruibal.com
Mi empresa: http://www.mobialia.com
Más recursos para aprender Android
Desarrollé la aplicación WikiPlaces como ejemplo para
LabAndroid Málaga. Esta aplicación contiene varios ejemplos
de cómo hacer muchas cosas comunes en Android
●   Pantalla inicial con un Dashboard
●   Crear pantallas de preferencias y obtener preferencias
●   Usar la API de Google Maps API (incluyendo overlays) y la
    Location API para obtener la ubicación
●   Usar servicios JSON externos
●   Listas y adapters
●   Lanzar aplicaciones externas con Intents
●   Integración con AdMob para mostrar anuncios
              http://www.mobialia.com/labandroid
¿Por qué integrar social media?

● Obtener datos de la red social
● Conseguir visibilidad en redes sociales


● Compartir datos de la aplicación


● Simplificar el login para los usuarios

  de tu aplicación
● Obtener datos adicionales del usuario
Aplicación de demostración




Todos los ejemplos de esta presentación
    están en una aplicación de código abierto:
http://www.mobialia.com/social_media_demo/
El botón de compartir
    ●   Muy fácil de implementar
    ●   Lanzamos un intent de tipo “ACTION_SEND” que va a
        ser recibido por las aplicaciones de social media

    public void onShareChoose(View v) {
   String shareText = ((EditText)
findViewById(R.id.EditText)).getText().toString();
        Intent intent = new Intent(android.content.Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(android.content.Intent.EXTRA_TEXT, shareText);
   startActivity(Intent.createChooser(intent,
getResources().getText(R.string.share_choose)));
}
Intents en Android
Son un sistema en Android que podemos
  utilizar para lanzar actividades de la
  misma o de diferentes aplicaciones

Una actividad lanza un intent
   El intent puede incluir datos “extra”
             Otra actividad recibe el intent
Esto muesta el selector de actividad
Especificando el componente
Podemos lanzar una actividad específica
(en este ejemplo lanzamos la aplicación
oficial de Twitter):

PackageManager packageManager = context.getPackageManager();

List<ResolveInfo> activityList = packageManager.queryIntentActivities(intent, 0);

for (ResolveInfo act : activityList) {

 if (act.activityInfo.name.indexOf("com.twitter.") == 0) { // Check it if starts by...

  ComponentName name = new ComponentName(act.activityInfo.applicationInfo.packageName,
act.activityInfo.name);

  intent.setComponent(name);

  startActivity(intent);

...
Integración con Twitter

●   En este ejemplo mostraremos el timeline del
    usuario
●   Twitter utiliza autenticación OAUTH
●   La respuesta de la API de Twitter es JSON
●   Hay muchas opciones, yo prefiero signpost
    http://code.google.com/p/oauth-signpost/
Añadiendo signpost
Hay tres versiones de la librería:
●   java.net.HttpUrlConnection
●   Apache Commons HTTP (usamos esta)
●   Jetty HTTP Client
Para integrarla es necesario descargar:
●   signpost-core-1.2.1.1.jar
●   signpost-commonshttp4-1.2.1.1.jar
Y añadirlos al build path de Eclipse
Obteniendo una API Key de Twitter (I)
Registra tu aplicación en https://dev.twitter.com/apps
Obteniendo una API Key de Twitter (II)
Una vez registrado,puedes optener el “Consumer key” y
el “Consumer secret” e insertarlos en el código:




OAuthConsumer oauthConsumer = new CommonsHttpOAuthConsumer(
  // the consumer key of this app (replace this with yours)
  "RFbRzd0BzYGZjrDd02ec5g" ,
  // the consumer secret of this app (replace this with yours)
  "wo9lKhzwpEfdXS2Z3dO2W092W9pMoJGrc5kUsBdA");
Interceptando la URL de callback
Interceptamos la URL de callback
“socialmediademo://twitter” URL modificando el
AndroidManifest.xml:
<activity
android:name =".TwitterProviderActivity"
android:label ="@string/app_name">
<intent-filter>
 <action android:name="android.intent.action.VIEW"></action>
 <category android:name="android.intent.category.DEFAULT"></category>
 <category android:name="android.intent.category.BROWSABLE"></category>
 <data android:scheme="socialmediademo" android:host="twitter"></data>
</intent-filter>
</activity>
Autenticando al usuario
Ahora redirigimos al usuario a la URL de autenticación,
especificando una URL de callback:
public static String CALLBACK_URL = "socialmediademo://twitter";
//...
 String authUrl = oauthProvider.retrieveRequestToken(oauthConsumer,
CALLBACK_URL);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
// save token
accessToken     = oauthConsumer.getToken();
tokenSecret = oauthConsumer.getTokenSecret();
 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP |
Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND |
Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Autenticación de Twitter



La página de Twitter se abre
en el navegador del sistema


Este ejemplo es de sólo
lectura (no se puede hacer
follow o enviar mensajes)
Verificando el login del usuario
Entonces, en la actividad que recibe el
callback (TwitterProviderActivity):

Uri uri = this.getIntent().getData();
String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
oauthConsumer.setTokenWithSecret(accessToken, tokenSecret);
oauthProvider.retrieveAccessToken(oauthConsumer, verifier);
// save new token
accessToken   = oauthConsumer.getToken();
tokenSecret = oauthConsumer.getTokenSecret();
Obteniendo los mensajes del timeline
Ahora podemos lanzar peticiones contra los
métodos de la API REST:

 String url =
"http://api.twitter.com/1/statuses/home_timeline.json?count=100";
HttpGet request = new HttpGet(url);
HttpClient httpClient = new DefaultHttpClient();
// sign the request
oauthConsumer.setTokenWithSecret(accessToken, tokenSecret);
oauthConsumer.sign(request);
HttpResponse response = httpClient.execute(request);
Interpretando la respuesta JSON
La API de Android integra un parser JSON

JSONArray array = new JSONArray(response);
for (int i = 0; i < array.length(); i++) {
    JSONObject user = object.getJSONObject("user");
    Update update = new Update();


update.setMessage(Html.fromHtml(object.getString("text")).toString()
);
    update.setUserId(user.getString("screen_name"));
    update.setUserName(user.getString("name"));
// ...
Finalmente mostramos el timeline

             En el código fuente
             también se puede
             encontrar:
              ●   Adapter de lista para
                  las actualizaciones de
                  estado
              ●   Cache de imágenes
Integración con LinkedIn

●   Muy similar a Twitter, también podemos usar
    libsignpost
●   API XML/JSON
●   Un pequeña diferencias: se necesita
    especificarle a signpost que LinkedIn utiliza
    OAUTH version 1.0a:
     oauthProvider.setOAuth10a(true);
Obteniendo una API Key de LinkedIn
https://www.linkedin.com/secure/developer
Autenticación de LinkedIn


          Funciona como la de Twitter,
          abriendo el navegador del
          sistema
          También tenemos una URL
          de Callback
Llamando a la API de LinkedIn
Por defecto en XML, debemos enviarle el
parámetro “&format=json”

String response =
httpRequest("http://api.linkedin.com/v1/people/~/network/updates?
count=100&format=json");
if (response != null) {
JSONObject object = new JSONObject(response);
//...
Resultado de LinkedIn


         Muestra las
         actualizaciones de estado
         de tus contactos de
         LinkedIn
Integrando Google+


●   Soporte OAuth 1.0a y 2.0 (experimental)
●   Podríamos usar google-api-java-client:
http://code.google.com/p/google-api-java-client/
●   En nuestro ejemplo utilizamos libsignpost con
    OAUTH 1.0a, también es necesario
    especificárselo explícitamente a libsignpost
Limitaciones de la API de Google+

●   Sólo lectura
●   No podemos acceder a los “Circles” del usuario
●   No se puede acceder al “Timeline”
Qué se puede hacer:
●   Obtener información de un usuario
●   Listar las “Actividades” de un usuario
●   Hacer búsquedas
Registrar un dominio para OAUTH 1
https://accounts.google.com/ManageDomains
Crear aplicación en Google API
               Console
         https://code.google.com/apis/console/




Registramos la
aplicación para obtener
una “API key”
Configurando OAUTH para Google+
●   Se crea el Consumer OAUTH con el dominio
oauthConsumer = new CommonsHttpOAuthConsumer("mobialia.com",
                                                "xxxxxxxxxxxxx");
●   Al crear el proveedor OAUTH le pasamos como parámetro
    una URL para el “scope”
String URL = "https://www.googleapis.com/auth/plus.me";


oauthProvider = new CommonsHttpOAuthProvider(
"https://www.google.com/accounts/OAuthGetRequestToken?scope=" +
      URLEncoder.encode(URL, "utf-8"),
"https://www.google.com/accounts/OAuthGetAccessToken",
"https://www.google.com/accounts/OAuthAuthorizeToken?hd=default");
Llamando a Google+
●   La autenticación funciona igual que la de
    Twitter
●   La key de la Google APIs console se le pasa
    en el momento de la llamada:
String response =
 httpRequest("https://www.googleapis.com/plus/v1/
people/me/activities/public?
key=AIzaSyBRloeHFF1G2_GafnnbhthvnYXljIi4oc4");
Resultado de Google+



         En nuestro ejemplo
         mostramos las
         “Actividades” del usuario
         que se ha autenticado en
         Google+
Utilizar el social media para login
No hace falta pedirle todos los datos al usuario
Yo recomiendo Facebook:
  ● Más usuarios


  ● Más datos de cada usuario


Podemos obtener datos adicionales del usuario:
  ● Género


  ● Edad


  ● ...
Integración con Facebook

●   Utiliza OAUTH 2.0, libsignpost no lo soporta
●   Necesitamos el SDK de Facebook de Github:
    https://github.com/facebook/facebook-android-sdk/
●   Configuramos el SDK de Facebook como un
    proyecto “Librería” y añadimos una
    dependencia a esa librería
●   Usamos la nueva Graph API
Obteniendo una API Key de
            Facebook (I)
https://www.facebook.com/developers/
Obteniendo una API Key de
               Facebook (II)
Aquí tenemos el identificador de la aplicación
Necesitamos especificarle un hash de la clave de nuestro
certificado: keytool -exportcert -alias androiddebugkey -keystore
~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Preparando el objeto de Facebook
Y lanzando la autenticación de Facebook

final   int ACTIVITY_CODE = 777;
final String appId = "219172308103195";
final String[] PERMISSIONS = new String[] { "user_birthday" };


Facebook fb = new Facebook(appId);
fb.authorize(this, PERMISSIONS, ACTIVITY_CODE, this);
// (Callback not detailed)
Login con Facebook

       Abre una Actividad de
       Facebook solicitando los
       datos de autenticación
Obtener datos del usuario de
              Facebook
Una vez autenticados podemos lanzar peticiones,
“/me” obtiene la información del usuario

String res = fb.request("/me");
JSONObject object = new JSONObject(res);
Log.d(TAG, object.getString("id"));
Log.d(TAG, object.getString("name"));
Log.d(TAG, object.getString("gender"));
Log.d(TAG, object.getString("birthday"));
Mejorando los anuncios con los
          datos del usuario
●   Podemos especificarle a AdMob el sexo del
    usuario y su edad:

AdRequest adRequest = new AdRequest();
adRequest.setGender(Gender.FEMALE);
adRequest.setBirthday("19790129");
AdView adView = (AdView) this.findViewById(R.id.adView);
adView.loadAd(adRequest);
Resultado de Facebook
       La aplicación de demo
       muestra los datos del usuario
       El anuncio mostrado se
       puede con los datos del
       usuario
       Podemos utilizar los datos
       del usuario en varias partes
       de la application
       ¡Cuidado con la LOPD si los
       guardamos en un servidor
       nuestro!
Más ideas
● Se puede utilizar una WebView para
  integrar Social Media
● Botón para hacer “Follow” integrando

  la API de Twitter
● Botón “Like” para facebook: necesita

  crear una página en Facebook
● “Foursquare” API integration
Redes sociales para gaming
Redes sociales específicas para
compartir LeaderBoards,
Achievements...
● OpenFeint


● ScoreLoop
Preguntas...


Gracias por vuestra atención!


        Alberto Alonso Ruibal
     alberto.ruibal@mobialia.com
       http://www.mobialia.com
     T: @mobialia @albertoruibal

Más contenido relacionado

Similar a Appcircus Academy: Integración de Social Media en Android

LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"Alberto Ruibal
 
Servicios web con Python
Servicios web con PythonServicios web con Python
Servicios web con PythonManuel Pérez
 
Congreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineCongreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineNigeŗ Arce
 
Web 2.0 ajax con SharePoint
Web 2.0 ajax con SharePointWeb 2.0 ajax con SharePoint
Web 2.0 ajax con SharePointgoreorti
 
Desarrollo android - 4 - arquitectura de aplicación
Desarrollo android  - 4 - arquitectura de aplicaciónDesarrollo android  - 4 - arquitectura de aplicación
Desarrollo android - 4 - arquitectura de aplicaciónEmilio Aviles Avila
 
Google cloud endpoints
Google cloud endpointsGoogle cloud endpoints
Google cloud endpointsGDG Lima
 
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxEvolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxLuis775803
 
Manual de aplicaciones moviles
Manual de aplicaciones moviles Manual de aplicaciones moviles
Manual de aplicaciones moviles Jael Vazquez
 
Prepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuroPrepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuroMiguel Tabera
 
Manual de aplicaciones moviles
Manual de aplicaciones moviles Manual de aplicaciones moviles
Manual de aplicaciones moviles Jael Vazquez
 
Manual de aplicaciones moviles
Manual de aplicaciones moviles Manual de aplicaciones moviles
Manual de aplicaciones moviles Jael Vazquez
 
Creando mi primer bot application en Visual Studio 2017
Creando mi primer bot application en Visual Studio 2017Creando mi primer bot application en Visual Studio 2017
Creando mi primer bot application en Visual Studio 2017Vicente Gerardo Guzman Lucio
 

Similar a Appcircus Academy: Integración de Social Media en Android (20)

Servicios web
Servicios webServicios web
Servicios web
 
Curso Cloud Computing, Parte 2: Google App Engine
Curso Cloud Computing, Parte 2: Google App EngineCurso Cloud Computing, Parte 2: Google App Engine
Curso Cloud Computing, Parte 2: Google App Engine
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
Introduccion a Android
Introduccion a AndroidIntroduccion a Android
Introduccion a Android
 
Servicios web con Python
Servicios web con PythonServicios web con Python
Servicios web con Python
 
Congreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineCongreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engine
 
Web 2.0 ajax con SharePoint
Web 2.0 ajax con SharePointWeb 2.0 ajax con SharePoint
Web 2.0 ajax con SharePoint
 
Desarrollo android - 4 - arquitectura de aplicación
Desarrollo android  - 4 - arquitectura de aplicaciónDesarrollo android  - 4 - arquitectura de aplicación
Desarrollo android - 4 - arquitectura de aplicación
 
Gadget review
Gadget reviewGadget review
Gadget review
 
Gadget review
Gadget reviewGadget review
Gadget review
 
Google cloud endpoints
Google cloud endpointsGoogle cloud endpoints
Google cloud endpoints
 
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxEvolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
 
Manual de aplicaciones moviles
Manual de aplicaciones moviles Manual de aplicaciones moviles
Manual de aplicaciones moviles
 
Prepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuroPrepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuro
 
Manual de aplicaciones moviles
Manual de aplicaciones moviles Manual de aplicaciones moviles
Manual de aplicaciones moviles
 
Manual de aplicaciones moviles
Manual de aplicaciones moviles Manual de aplicaciones moviles
Manual de aplicaciones moviles
 
Google apps engine
Google apps engineGoogle apps engine
Google apps engine
 
Manual marichuy
Manual marichuyManual marichuy
Manual marichuy
 
Manual marichuy
Manual marichuyManual marichuy
Manual marichuy
 
Creando mi primer bot application en Visual Studio 2017
Creando mi primer bot application en Visual Studio 2017Creando mi primer bot application en Visual Studio 2017
Creando mi primer bot application en Visual Studio 2017
 

Último

TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxdanalikcruz2000
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfsamyarrocha1
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADOJosé Luis Palma
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxMapyMerma1
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 

Último (20)

TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptxLINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
LINEAMIENTOS INICIO DEL AÑO LECTIVO 2024-2025.pptx
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
Fundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdfFundamentos y Principios de Psicopedagogía..pdf
Fundamentos y Principios de Psicopedagogía..pdf
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
Unidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDIUnidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDI
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADODECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
DECÁGOLO DEL GENERAL ELOY ALFARO DELGADO
 
Procesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptxProcesos Didácticos en Educación Inicial .pptx
Procesos Didácticos en Educación Inicial .pptx
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 

Appcircus Academy: Integración de Social Media en Android

  • 1. Workshop: Integración de Social Media en Android Appcircus Academy Alberto Alonso Ruibal alberto.ruibal@mobialia.com T: @mobialia @albertoruibal
  • 2. Quién soy Ingeniero de Telecomunicación System Manager J2EE Developer Desarrollador Android @ Mobialia Mobialia Chess, Internet Chess Club App Gasolineras España, Connect-4, Trivial, Slot Racing Martin Varsavsky's RadioMe Track my Followers for Twitter Mi blog: http://www.alonsoruibal.com Mi empresa: http://www.mobialia.com
  • 3. Más recursos para aprender Android Desarrollé la aplicación WikiPlaces como ejemplo para LabAndroid Málaga. Esta aplicación contiene varios ejemplos de cómo hacer muchas cosas comunes en Android ● Pantalla inicial con un Dashboard ● Crear pantallas de preferencias y obtener preferencias ● Usar la API de Google Maps API (incluyendo overlays) y la Location API para obtener la ubicación ● Usar servicios JSON externos ● Listas y adapters ● Lanzar aplicaciones externas con Intents ● Integración con AdMob para mostrar anuncios http://www.mobialia.com/labandroid
  • 4. ¿Por qué integrar social media? ● Obtener datos de la red social ● Conseguir visibilidad en redes sociales ● Compartir datos de la aplicación ● Simplificar el login para los usuarios de tu aplicación ● Obtener datos adicionales del usuario
  • 5. Aplicación de demostración Todos los ejemplos de esta presentación están en una aplicación de código abierto: http://www.mobialia.com/social_media_demo/
  • 6. El botón de compartir ● Muy fácil de implementar ● Lanzamos un intent de tipo “ACTION_SEND” que va a ser recibido por las aplicaciones de social media public void onShareChoose(View v) { String shareText = ((EditText) findViewById(R.id.EditText)).getText().toString(); Intent intent = new Intent(android.content.Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(android.content.Intent.EXTRA_TEXT, shareText); startActivity(Intent.createChooser(intent, getResources().getText(R.string.share_choose))); }
  • 7. Intents en Android Son un sistema en Android que podemos utilizar para lanzar actividades de la misma o de diferentes aplicaciones Una actividad lanza un intent El intent puede incluir datos “extra” Otra actividad recibe el intent
  • 8. Esto muesta el selector de actividad
  • 9. Especificando el componente Podemos lanzar una actividad específica (en este ejemplo lanzamos la aplicación oficial de Twitter): PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> activityList = packageManager.queryIntentActivities(intent, 0); for (ResolveInfo act : activityList) { if (act.activityInfo.name.indexOf("com.twitter.") == 0) { // Check it if starts by... ComponentName name = new ComponentName(act.activityInfo.applicationInfo.packageName, act.activityInfo.name); intent.setComponent(name); startActivity(intent); ...
  • 10. Integración con Twitter ● En este ejemplo mostraremos el timeline del usuario ● Twitter utiliza autenticación OAUTH ● La respuesta de la API de Twitter es JSON ● Hay muchas opciones, yo prefiero signpost http://code.google.com/p/oauth-signpost/
  • 11. Añadiendo signpost Hay tres versiones de la librería: ● java.net.HttpUrlConnection ● Apache Commons HTTP (usamos esta) ● Jetty HTTP Client Para integrarla es necesario descargar: ● signpost-core-1.2.1.1.jar ● signpost-commonshttp4-1.2.1.1.jar Y añadirlos al build path de Eclipse
  • 12. Obteniendo una API Key de Twitter (I) Registra tu aplicación en https://dev.twitter.com/apps
  • 13. Obteniendo una API Key de Twitter (II) Una vez registrado,puedes optener el “Consumer key” y el “Consumer secret” e insertarlos en el código: OAuthConsumer oauthConsumer = new CommonsHttpOAuthConsumer( // the consumer key of this app (replace this with yours) "RFbRzd0BzYGZjrDd02ec5g" , // the consumer secret of this app (replace this with yours) "wo9lKhzwpEfdXS2Z3dO2W092W9pMoJGrc5kUsBdA");
  • 14. Interceptando la URL de callback Interceptamos la URL de callback “socialmediademo://twitter” URL modificando el AndroidManifest.xml: <activity android:name =".TwitterProviderActivity" android:label ="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW"></action> <category android:name="android.intent.category.DEFAULT"></category> <category android:name="android.intent.category.BROWSABLE"></category> <data android:scheme="socialmediademo" android:host="twitter"></data> </intent-filter> </activity>
  • 15. Autenticando al usuario Ahora redirigimos al usuario a la URL de autenticación, especificando una URL de callback: public static String CALLBACK_URL = "socialmediademo://twitter"; //... String authUrl = oauthProvider.retrieveRequestToken(oauthConsumer, CALLBACK_URL); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)); // save token accessToken = oauthConsumer.getToken(); tokenSecret = oauthConsumer.getTokenSecret(); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND | Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent);
  • 16. Autenticación de Twitter La página de Twitter se abre en el navegador del sistema Este ejemplo es de sólo lectura (no se puede hacer follow o enviar mensajes)
  • 17. Verificando el login del usuario Entonces, en la actividad que recibe el callback (TwitterProviderActivity): Uri uri = this.getIntent().getData(); String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); oauthConsumer.setTokenWithSecret(accessToken, tokenSecret); oauthProvider.retrieveAccessToken(oauthConsumer, verifier); // save new token accessToken = oauthConsumer.getToken(); tokenSecret = oauthConsumer.getTokenSecret();
  • 18. Obteniendo los mensajes del timeline Ahora podemos lanzar peticiones contra los métodos de la API REST: String url = "http://api.twitter.com/1/statuses/home_timeline.json?count=100"; HttpGet request = new HttpGet(url); HttpClient httpClient = new DefaultHttpClient(); // sign the request oauthConsumer.setTokenWithSecret(accessToken, tokenSecret); oauthConsumer.sign(request); HttpResponse response = httpClient.execute(request);
  • 19. Interpretando la respuesta JSON La API de Android integra un parser JSON JSONArray array = new JSONArray(response); for (int i = 0; i < array.length(); i++) { JSONObject user = object.getJSONObject("user"); Update update = new Update(); update.setMessage(Html.fromHtml(object.getString("text")).toString() ); update.setUserId(user.getString("screen_name")); update.setUserName(user.getString("name")); // ...
  • 20. Finalmente mostramos el timeline En el código fuente también se puede encontrar: ● Adapter de lista para las actualizaciones de estado ● Cache de imágenes
  • 21. Integración con LinkedIn ● Muy similar a Twitter, también podemos usar libsignpost ● API XML/JSON ● Un pequeña diferencias: se necesita especificarle a signpost que LinkedIn utiliza OAUTH version 1.0a: oauthProvider.setOAuth10a(true);
  • 22. Obteniendo una API Key de LinkedIn https://www.linkedin.com/secure/developer
  • 23. Autenticación de LinkedIn Funciona como la de Twitter, abriendo el navegador del sistema También tenemos una URL de Callback
  • 24. Llamando a la API de LinkedIn Por defecto en XML, debemos enviarle el parámetro “&format=json” String response = httpRequest("http://api.linkedin.com/v1/people/~/network/updates? count=100&format=json"); if (response != null) { JSONObject object = new JSONObject(response); //...
  • 25. Resultado de LinkedIn Muestra las actualizaciones de estado de tus contactos de LinkedIn
  • 26. Integrando Google+ ● Soporte OAuth 1.0a y 2.0 (experimental) ● Podríamos usar google-api-java-client: http://code.google.com/p/google-api-java-client/ ● En nuestro ejemplo utilizamos libsignpost con OAUTH 1.0a, también es necesario especificárselo explícitamente a libsignpost
  • 27. Limitaciones de la API de Google+ ● Sólo lectura ● No podemos acceder a los “Circles” del usuario ● No se puede acceder al “Timeline” Qué se puede hacer: ● Obtener información de un usuario ● Listar las “Actividades” de un usuario ● Hacer búsquedas
  • 28. Registrar un dominio para OAUTH 1 https://accounts.google.com/ManageDomains
  • 29. Crear aplicación en Google API Console https://code.google.com/apis/console/ Registramos la aplicación para obtener una “API key”
  • 30. Configurando OAUTH para Google+ ● Se crea el Consumer OAUTH con el dominio oauthConsumer = new CommonsHttpOAuthConsumer("mobialia.com", "xxxxxxxxxxxxx"); ● Al crear el proveedor OAUTH le pasamos como parámetro una URL para el “scope” String URL = "https://www.googleapis.com/auth/plus.me"; oauthProvider = new CommonsHttpOAuthProvider( "https://www.google.com/accounts/OAuthGetRequestToken?scope=" + URLEncoder.encode(URL, "utf-8"), "https://www.google.com/accounts/OAuthGetAccessToken", "https://www.google.com/accounts/OAuthAuthorizeToken?hd=default");
  • 31. Llamando a Google+ ● La autenticación funciona igual que la de Twitter ● La key de la Google APIs console se le pasa en el momento de la llamada: String response = httpRequest("https://www.googleapis.com/plus/v1/ people/me/activities/public? key=AIzaSyBRloeHFF1G2_GafnnbhthvnYXljIi4oc4");
  • 32. Resultado de Google+ En nuestro ejemplo mostramos las “Actividades” del usuario que se ha autenticado en Google+
  • 33. Utilizar el social media para login No hace falta pedirle todos los datos al usuario Yo recomiendo Facebook: ● Más usuarios ● Más datos de cada usuario Podemos obtener datos adicionales del usuario: ● Género ● Edad ● ...
  • 34. Integración con Facebook ● Utiliza OAUTH 2.0, libsignpost no lo soporta ● Necesitamos el SDK de Facebook de Github: https://github.com/facebook/facebook-android-sdk/ ● Configuramos el SDK de Facebook como un proyecto “Librería” y añadimos una dependencia a esa librería ● Usamos la nueva Graph API
  • 35. Obteniendo una API Key de Facebook (I) https://www.facebook.com/developers/
  • 36. Obteniendo una API Key de Facebook (II) Aquí tenemos el identificador de la aplicación Necesitamos especificarle un hash de la clave de nuestro certificado: keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
  • 37. Preparando el objeto de Facebook Y lanzando la autenticación de Facebook final int ACTIVITY_CODE = 777; final String appId = "219172308103195"; final String[] PERMISSIONS = new String[] { "user_birthday" }; Facebook fb = new Facebook(appId); fb.authorize(this, PERMISSIONS, ACTIVITY_CODE, this); // (Callback not detailed)
  • 38. Login con Facebook Abre una Actividad de Facebook solicitando los datos de autenticación
  • 39. Obtener datos del usuario de Facebook Una vez autenticados podemos lanzar peticiones, “/me” obtiene la información del usuario String res = fb.request("/me"); JSONObject object = new JSONObject(res); Log.d(TAG, object.getString("id")); Log.d(TAG, object.getString("name")); Log.d(TAG, object.getString("gender")); Log.d(TAG, object.getString("birthday"));
  • 40. Mejorando los anuncios con los datos del usuario ● Podemos especificarle a AdMob el sexo del usuario y su edad: AdRequest adRequest = new AdRequest(); adRequest.setGender(Gender.FEMALE); adRequest.setBirthday("19790129"); AdView adView = (AdView) this.findViewById(R.id.adView); adView.loadAd(adRequest);
  • 41. Resultado de Facebook La aplicación de demo muestra los datos del usuario El anuncio mostrado se puede con los datos del usuario Podemos utilizar los datos del usuario en varias partes de la application ¡Cuidado con la LOPD si los guardamos en un servidor nuestro!
  • 42. Más ideas ● Se puede utilizar una WebView para integrar Social Media ● Botón para hacer “Follow” integrando la API de Twitter ● Botón “Like” para facebook: necesita crear una página en Facebook ● “Foursquare” API integration
  • 43. Redes sociales para gaming Redes sociales específicas para compartir LeaderBoards, Achievements... ● OpenFeint ● ScoreLoop
  • 44. Preguntas... Gracias por vuestra atención! Alberto Alonso Ruibal alberto.ruibal@mobialia.com http://www.mobialia.com T: @mobialia @albertoruibal