miércoles, 6 de abril de 2011

Integrando OpenFeint en Android



El fin de semana comencé a integrar algunos de mis juegos en Android con OpenFeint. Si bien la API y funcionalidades para Android es exageradamente limitada al compararse con la de iOS, después de ponderar la cantidad de usuarios, variedad de juegos, reconocimiento y estabilidad, llegué a la conclusión de que era la opción más viable.

No pienso cubrir aquí detalles de cómo incluir la librería de OpenFeint (SDK) en los proyectos. Es algo estúpidamente sencillo. Lo que quiero que veamos es un flujo básico de integración. Aclaro que estoy usando la versión 1.8 del SDK con la interfaz web existente al día de hoy. Así que los puntos son algo así:



Prerrequisitos

  • Tener una cuenta en OpenFeint. Es gratis y puedes obtenerla aquí.
  • Registrar un juego (creo que te lo pide al momento de registrarte)
Pasos en la web de OpenFeint:
  1. En la barra de la izquierda, clic en "Application Information"
  2. Copiar el "Client Application ID", "Product Key" y "Product Secret"
  3. En la pestaña de "Features", crear un Leaderboard y apuntar su "Unique ID"
  4. Crear una serie de Achievements. Recuerda que tienes un máximo de 1,000 puntos. La aprobación de tu juego tardará menos, mientras más logros o retos creas.
  5. Apuntar el "Unique ID" o quedarse en esa página
Inicializando en código (de nuevo, ya debes tener integrada la librería a tu proyecto):
  1. Incluir estas líneas sustituyendo los parámetros de la primera, por lo copiado en el paso "2" (recomiendo en el onCreate de tu primer Activity):
    OpenFeintSettings settings = new OpenFeintSettings(gameName, gameKey, gameSecret, gameID); 
    OpenFeint.initializeWithoutLoggingIn(this, settings, new OpenFeintDelegate() { });
  2. Donde quieras desplegar tus stats, poner algo como:
    if (!OpenFeint.isUserLoggedIn()) {
        OpenFeint.login();
    }
    Dashboard.open();
Enviando datos y desbloqueando logros:

Para enviar un nuevo score:
Leaderboard l = new Leaderboard("idDelPunto3");
Score s = new Score((long)taps, null);
s.submitTo(l, null);

Para desbloquear un logro:
new Achievement("idDelPunto5").unlock(null);

Algunas notas:
  • Salvo que marques la casilla "Allow Worst Scores" en el punto 3, no importa si el nuevo puntaje de ese usuario es menor a uno anterior: sólo dejará en los leaderboards el más alto
  • Tampoco importa si un Achievement ya estaba desbloqueado. Es decir, no es un switch que bloquee y desbloquee
  • Los parámetros "null" del envío de score y achievement corresponden a los callbacks. Puedes implementar una interfaz para realizar una acción determinada a modo de callback toda vez que se termina el proceso. Pero, dado que OpenFeint automáticamente despliega un pequeño Toast al recibir un score o desbloquear un logro, yo en lo personal lo considero innecesario
  • Siguiendo con logros y score, yo suelo hacer una clase Helper con un método estático que recibe las variables de mi juego, y valida todos estos elementos. Me parece una aproximación bastante sencilla, pero bueno, queda en ti
  • La clase "Dashboard" tiene muchos otros métodos. Para abrir leaderboards, ver amigos, ver juegos... Pero el "open" puro y duro te deja ver tu "Panel de Control" con todas estas opciones a manera de lista
  • El SDK tiene una App de ejemplo un poco más detallada. Ahora que ya conoces lo básico, tal vez te interese echarle un vistazo
  • Para que tu app aparezca en el listado de juegos de los usuarios, tiene que estar aprobada. El proceso de aprobación lo realiza el staff de Feint y no suele llevar más de 24hr, pero sí es recomendable que tu juego ya esté terminado y en el market para que no exista problema
Espero que esto resulte útil para alguien. Cualquier duda por favor dejen un comentario.

Saludos,

Posts relacionados