am.oauth
Class OAuth

java.lang.Object
  extended by am.oauth.OAuth

public class OAuth
extends Object

Implementación de algunas utilidades para el uso transparente del protocolo OAuth.

Antes de realizar cualquier petición a una API que requiera permiso previo del usuario al cual pertenecen los datos, será necesario establecer una negociación de autorización con la entidad (en este caso, Yahoo!). Al final de la negociación se consiguen una serie de claves (y fechas de expiración de éstas), que son las que se utilizarán para firmar las peticiones a la API.

Por tanto, antes de una llamada a la API en cuestión, se debe crear un objeto de la clase OAuth. Este objeto se encargará de conseguir las claves y firmar las peticiones a lo largo de toda la sesión (no es necesario crear otro distinto).

En el constructor se pasa el objeto Activity del cual depende y un Bundle que puede contener, o bien sólo "Consumer Key" y "Shared Secret", o bien además el resto de datos: "Access Token", "Access Token Secret", "Access Token Expiry", "Session Credential" y "Session Credential Expiry". Dependiendo de los datos recibidos se pueden tomar caminos diferentes:

Si es necesario lanzar una Activity, el código que haya después de la llamada al constructor puede no llegar a ejecutarse si éste actúa sobre la Activity que recibe como parámetro. Igualmente no debe seguirse de líneas como ésta:
 while(!isWorking());
 
Puesto que al construir el objeto se puede lanzar una subactividad de la que recibe como parámetro, esta Activity debe implementar el método Activity#onActivityResult() como se muestra a continuación:
 protected void onActivityResult (int requestCode, int resultCode, Intent data){
        switch(requestCode){
        case OAuth.OAUTH_ACTIVITY:
                oauth.onActivityResult(requestCode, resultCode, data);
                // TU CÓDIGO TRAS EL FIN DE LA NEGOCIACIÓN OAUTH
                break;
        // TU CÓDIGO PARA OTRAS ACTIVIDADES HIJAS DE ÉSTA
        default:
        }
  } 
 
Una vez que se ha creado el objeto y isWorking() devuelve true, se pueden hacer peticiones:

Version:
2.6
Author:
Estrella Mª García Lozano

Field Summary
static int OAUTH_ACTIVITY
          Identificador de la Activity que lanza el objeto si es necesario conseguir el resto de claves.
 
Constructor Summary
OAuth(Activity parent, Bundle oauth)
          Inicializa un objeto OAuth de modo que internamente se establezca una relación de autorización usando los secretos proporcionados.
 
Method Summary
 boolean canWork()
          Determina si se pueden conseguir todas las claves OAuth con la información disponible.
 String createAuthorizationHeader(String method, String url, String[][] params)
          Genera el contenido de la cabecera Authorization que se debe incluir en peticiones OAuth HTTP con los datos criptográficos disponibles y la información específica de la petición.
 Bundle getSecrets()
          Proporciona un Bundle con los datos OAuth disponibles: "Consumer Key" y "Shared Secret" si canWork() devuelve true, y además "Access Token", "Access Token Secret", "Access Token Expiry", "Session Credential" y "Session Credential Expiry" actualizados si isWorking() devuelve true.
 boolean isWorking()
          Determina si se pueden generar cabeceras Authorization.
 void onActivityResult(int requestCode, int resultCode, Intent data)
          Método que debe llamarse desde Activity#onActivityResult() de la Activity que recibió como parámetro en el constructor cuando requestCode es igual a OAUTH_ACTIVITY.
 String urlEncode(String text)
          Transforma un String en otro que puede ser enviado como la parte de parámetros de una URL.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

OAUTH_ACTIVITY

public static final int OAUTH_ACTIVITY
Identificador de la Activity que lanza el objeto si es necesario conseguir el resto de claves.

See Also:
Constant Field Values
Constructor Detail

OAuth

public OAuth(Activity parent,
             Bundle oauth)
Inicializa un objeto OAuth de modo que internamente se establezca una relación de autorización usando los secretos proporcionados.

Este constructor recibe, por un lado, una Activity de la que depende para lanzar una nueva Activity en caso necesario, y en la que mostrará mensajes de error; y por otro lado, un Bundle con datos necesarios para establecer la relación: "Consumer Key" y "Shared Secret" y, opcionalmente, también "Access Token", "Access Token Secret", "Access Token Expiry", "Session Credential" y "Session Credential Expiry" (se deben respetar las mayúsculas/minúsculas).

Method Detail

getSecrets

public Bundle getSecrets()
Proporciona un Bundle con los datos OAuth disponibles: "Consumer Key" y "Shared Secret" si canWork() devuelve true, y además "Access Token", "Access Token Secret", "Access Token Expiry", "Session Credential" y "Session Credential Expiry" actualizados si isWorking() devuelve true.

Returns:
el Bundle con los datos OAuth.

onActivityResult

public void onActivityResult(int requestCode,
                             int resultCode,
                             Intent data)
Método que debe llamarse desde Activity#onActivityResult() de la Activity que recibió como parámetro en el constructor cuando requestCode es igual a OAUTH_ACTIVITY.

Parameters:
requestCode - el valor correspondiente en la Activity
resultCode - el valor correspondiente en la Activity
data - el valor correspondiente en la Activity

createAuthorizationHeader

public String createAuthorizationHeader(String method,
                                        String url,
                                        String[][] params)
Genera el contenido de la cabecera Authorization que se debe incluir en peticiones OAuth HTTP con los datos criptográficos disponibles y la información específica de la petición. La llamada es igual y funciona de la misma forma que su versión en Java SE.

Parameters:
method - método de petición HTTP: GET, POST o HEAD.
url - URL a la que se enviará la petición.
params - array de parámetros en la forma nombre-valor. En cada fila contiene un array de 2 Strings, de modo que en la primera posición aparezca el nombre del parámetro y en la seguda el valor. Si la petición no tiene parámetros, debe ser null.
Returns:
el contenido de la cabecera Authorization.

urlEncode

public String urlEncode(String text)
Transforma un String en otro que puede ser enviado como la parte de parámetros de una URL.

Parameters:
text - el String que debe ser codificado.
Returns:
el texto convenientemente codificado.

isWorking

public boolean isWorking()
Determina si se pueden generar cabeceras Authorization.

Returns:
true si se dispone de todas las claves OAuth actualizadas, false en caso contrario

canWork

public boolean canWork()
Determina si se pueden conseguir todas las claves OAuth con la información disponible.

Returns:
true si se dispone de referencia a una Activity, "Consumer Key" y "Shared Secret", false en caso contrario