java - studio - integrar sdk facebook en android
Ejemplo de Java cómo iniciar sesión con una cuenta de Facebook en GAE usando OAuth (5)
Así es como lo hago en App Engine:
Paso 1) Registre una "aplicación" en Facebook (consulte https://developers.facebook.com/ ). Le das a Facebook un nombre para la aplicación y una url. La url que registra es la url de la página (jsp o servlet) que desea manejar con el inicio de sesión. Desde el registro, obtiene dos cadenas, una "ID de la aplicación" y una "aplicación secreta" (esta última es su contraseña, no la entregue o escriba en html).
Para este ejemplo, digamos que la url que registro es " http://myappengineappid.appspot.com/signin_fb.do ".
2) Desde una página web, por ejemplo con un botón, redirige al usuario a la siguiente url en Facebook, sustituyendo su id de aplicación por "myfacebookappid" en el ejemplo siguiente. También debe elegir qué permisos (o "ámbitos") desea solicitar al usuario (consulte https://developers.facebook.com/docs/reference/api/permissions/ ). En el ejemplo, solicito acceso solo al correo electrónico del usuario.
(Una cosa útil que debe saber es que también puede pasar una cadena opcional que se devolverá sin cambios en el parámetro "estado". Por ejemplo, paso la clave del almacén de datos del usuario, para poder recuperar al usuario cuando Facebook devuelve la clave para mí. No hago esto en el ejemplo).
Aquí hay un fragmento de jsp:
<%@page import="java.net.URLEncoder" %>
<%
String fbURL = "http://www.facebook.com/dialog/oauth?client_id=myfacebookappid&redirect_uri=" + URLEncoder.encode("http://myappengineappid.appspot.com/signin_fb.do") + "&scope=email";
%>
<a href="<%= fbURL %>"><img src="/img/facebook.png" border="0" /></a>
3) Su usuario será reenviado a Facebook y se le pedirá que apruebe los permisos que solicita. Luego, el usuario será redireccionado a la url que ha registrado. En este ejemplo, esto es " http://myappengineappid.appspot.com/signin_fb.do " que en mi web.xml se correlaciona con el siguiente servlet:
import org.json.JSONObject;
import org.json.JSONException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SignInFB extends HttpServlet {
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String code = req.getParameter("code");
if (code == null || code.equals("")) {
// an error occurred, handle this
}
String token = null;
try {
String g = "https://graph.facebook.com/oauth/access_token?client_id=myfacebookappid&redirect_uri=" + URLEncoder.encode("http://myappengineappid.appspot.com/signin_fb.do", "UTF-8") + "&client_secret=myfacebookappsecret&code=" + code;
URL u = new URL(g);
URLConnection c = u.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
String inputLine;
StringBuffer b = new StringBuffer();
while ((inputLine = in.readLine()) != null)
b.append(inputLine + "/n");
in.close();
token = b.toString();
if (token.startsWith("{"))
throw new Exception("error on requesting token: " + token + " with code: " + code);
} catch (Exception e) {
// an error occurred, handle this
}
String graph = null;
try {
String g = "https://graph.facebook.com/me?" + token;
URL u = new URL(g);
URLConnection c = u.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
String inputLine;
StringBuffer b = new StringBuffer();
while ((inputLine = in.readLine()) != null)
b.append(inputLine + "/n");
in.close();
graph = b.toString();
} catch (Exception e) {
// an error occurred, handle this
}
String facebookId;
String firstName;
String middleNames;
String lastName;
String email;
Gender gender;
try {
JSONObject json = new JSONObject(graph);
facebookId = json.getString("id");
firstName = json.getString("first_name");
if (json.has("middle_name"))
middleNames = json.getString("middle_name");
else
middleNames = null;
if (middleNames != null && middleNames.equals(""))
middleNames = null;
lastName = json.getString("last_name");
email = json.getString("email");
if (json.has("gender")) {
String g = json.getString("gender");
if (g.equalsIgnoreCase("female"))
gender = Gender.FEMALE;
else if (g.equalsIgnoreCase("male"))
gender = Gender.MALE;
else
gender = Gender.UNKNOWN;
} else {
gender = Gender.UNKNOWN;
}
} catch (JSONException e) {
// an error occurred, handle this
}
...
He eliminado el código de manejo de errores, ya que es posible que desee manejarlo de manera diferente que yo. (Además, "Género" es, por supuesto, una clase que he definido). En este punto, puede usar los datos para lo que desee, como registrar un nuevo usuario o buscar un usuario existente para iniciar sesión. Tenga en cuenta que " myfacebookappsecret "string debería ser tu aplicación secreta de Facebook.
Necesitará el paquete "org.json" para usar este código, que puede encontrar en: http://json.org/java/ (solo tome los archivos .java y agréguelos a su código en una carpeta org / json estructura).
Espero que esto ayude. Si algo no está claro, haga un comentario y actualizaré la respuesta.
Ex animo, - Alexander.
****ACTUALIZAR****
Quiero agregar algunas cositas de información, mis disculpas si algo de esto parece un poco excesivo.
Para poder iniciar sesión en un usuario por su cuenta de Facebook, debe saber qué usuario del almacén de datos estamos hablando. Si se trata de un nuevo usuario, crea un nuevo objeto de usuario (con un campo llamado "facebookId", o como quieras llamarlo, cuyo valor obtienes de Facebook), persiste en el almacén de datos y registra al usuario.
Si el usuario existe, necesita tener el campo con facebookId. Cuando el usuario es redirigido desde Facebook, puede tomar el facebookId y buscar en el almacén de datos para encontrar el usuario que desea iniciar sesión.
Si ya tiene usuarios, deberá dejar que se registren como lo hace normalmente, para saber quiénes son, luego enviarlos a Facebook, recuperar el facebookId y actualizar su objeto de usuario. De esta forma, pueden iniciar sesión usando Facebook la próxima vez.
Otra pequeña nota: al usuario se le presentará una pantalla en Facebook que le pide que permita que su aplicación acceda a los ámbitos que usted solicite; no hay forma de evitar esto (cuanto menos alcance solicite, menos intrusivo parecería). Sin embargo, esto solo ocurre la primera vez que se redirige a un usuario (a menos que solicite más ámbitos más adelante, se lo preguntará nuevamente).
Busqué mucho, leí muchos blogs, artículos, tutoriales, pero hasta ahora no obtuve un ejemplo práctico de que podía usar la cuenta de Facebook para iniciar sesión en mi aplicación.
Sé que tengo que usar OAuth, obtener tokens, autorizaciones, etc.
¿Alguien puede compartir un ejemplo? (en GAE / JAVA)
Compruebe las API de Facebook de java.
Otros ejemplos: http://code.google.com/p/facebook-java-api/wiki/Examples
Puede echar un vistazo a LeanEngine, la parte del servidor: https://github.com/leanengine/LeanEngine-Server/tree/master/lean-server-lib/src/main/java/com/leanengine/server/auth
Puedes probar face4j https://github.com/nischal/face4j/wiki . Lo hemos usado en nuestro producto http://grabinbox.com y lo hemos abierto para que cualquiera lo use. Funciona bien en GAE.
Hay un ejemplo en la wiki que debería ayudarlo a integrar el inicio de sesión con Facebook en unos minutos.
face4j utiliza oAuth 2.0 y la API gráfica de Facebook.
Tuve muchas dificultades al intentar implementar la firma de OAuth. Pasé mucho tiempo tratando de solucionar un problema con mis tokens que no estaban siendo autorizados, un problema común aparentemente. Desafortunadamente, ninguna de las soluciones funcionó para mí, así que terminé usando Scribe , una ingeniosa biblioteca Java OAuth que tiene el beneficio adicional de apoyar a otros proveedores además de Facebook (por ejemplo, Google, Twitter, etc.)