Cómo usar una API de gráficos de Facebook en Android para obtener los detalles de mis amigos de Facebook, como su ID de Facebook, nombre, fecha de nacimiento, etc.

Hola,

Sin enviar la aplicación para su revisión en Facebook, no podemos obtener el DOB y la ubicación del usuario de Facebook, etc. Pero para fines de prueba, podemos obtener el DOB y la ubicación solo del administrador , desarrollador y probador del creador de la aplicación de Facebook .

Descargue el código fuente desde aquí ( Obtenga la ubicación del usuario de Facebook usando la API gráfica en Android )

Agregue estas dependencias:

compile ‘com.facebook.android:facebook-android-sdk:4.0.1’

activity_main.xml:

<LinearLayout android: layout_width = "match_parent"
android: layout_height = “match_parent”
android: orientación = “vertical”
xmlns: android = “http://schemas.android.com/apk/res/android”>

<ImageView
android: layout_width = “100dp”
android: layout_height = “100dp”
android: id = “@ + id / iv_image”
android: layout_marginTop = “10dp”
android: layout_marginBottom = “10dp”
android: layout_gravity = “center_horizontal”
android: src = “@ drawable / profile” />

<LinearLayout
android: layout_width = “match_parent”
android: orientación = “horizontal”
android: layout_height = “wrap_content”>
<TextView
android: layout_width = “100dp”
android: layout_height = “40dp”
android: text = “Nombre”
android: gravity = “center_vertical”
android: textSize = “15dp”
android: textColor = “# 000000”

android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<TextView
android: layout_width = “wrap_content”
android: layout_height = “40dp”
android: text = “Nombre”
android: textSize = “15dp”
android: id = “@ + id / tv_name”
android: gravity = “center_vertical”
android: textColor = “# 000000”
android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<LinearLayout
android: layout_width = “match_parent”
android: layout_height = “wrap_content”
android: orientación = “horizontal”>

<TextView
android: layout_width = “100dp”
android: layout_height = “40dp”
android: text = “Correo electrónico”
android: gravity = “center_vertical”
android: textSize = “15dp”
android: layout_below = “@ + id / tv_name”
android: textColor = “# 000000”
android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<TextView
android: layout_width = “wrap_content”
android: layout_height = “40dp”
android: layout_below = “@ + id / tv_name”
android: text = “Correo electrónico”
android: gravity = “center_vertical”
android: textSize = “15dp”
android: id = “@ + id / tv_email”
android: textColor = “# 000000”
android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<LinearLayout
android: layout_width = “match_parent”
android: layout_height = “wrap_content”
android: orientación = “horizontal”>

<TextView
android: layout_width = “100dp”
android: layout_height = “40dp”
android: text = “DOB”
android: gravity = “center_vertical”
android: textSize = “15dp”
android: textColor = “# 000000”
android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<TextView
android: layout_width = “wrap_content”
android: layout_height = “40dp”
android: layout_below = “@ + id / tv_name”
android: text = “DOB”
android: gravity = “center_vertical”
android: textSize = “15dp”
android: id = “@ + id / tv_dob”
android: layout_toRightOf = “@ + id / tv_email”
android: textColor = “# 000000”
android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<LinearLayout
android: layout_width = “match_parent”
android: layout_height = “wrap_content”
android: orientación = “horizontal”>

<TextView
android: layout_width = “100dp”
android: layout_height = “40dp”
android: text = “Ubicación”
android: gravity = “center_vertical”
android: textSize = “15dp”
android: textColor = “# 000000”
android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<TextView
android: layout_width = “wrap_content”
android: layout_height = “40dp”
android: layout_below = “@ + id / tv_name”
android: text = “ubicación”
android: gravity = “center_vertical”
android: textSize = “15dp”
android: id = “@ + id / tv_location”
android: textColor = “# 000000”
android: layout_marginLeft = “10dp”
android: layout_marginTop = “10dp” />

<LinearLayout
android: layout_width = “match_parent”
android: background = “# 6585C8”
android: id = “@ + id / ll_facebook”
android: layout_marginLeft = “10dp”
android: layout_marginRight = “10dp”
android: layout_marginTop = “40dp”
android: layout_height = “50dp”>

<ImageView
android: layout_width = “50dp”
android: src = “@ drawable / facebook”
android: id = “@ + id / iv_facebook”
android: layout_height = “50dp” />

<TextView
android: layout_width = “wrap_content”
android: layout_height = “wrap_content”
android: text = “Iniciar sesión con Facebook”
android: textSize = “20dp”
android: textColor = “# FFFFFF”
android: textStyle = “bold”
android: id = “@ + id / tv_facebook”
android: layout_marginLeft = “20dp”
android: gravity = “center”
android: layout_gravity = “centro”

/>

MainActivity.java

paquete facebooklocation.facebooklocation;

importar android.content.Intent;
importar android.content.pm.PackageInfo;
importar android.content.pm.PackageManager;
importar android.content.pm.Signature;
importar android.support.v7.app.AppCompatActivity;
importar android.os.Bundle;
importar android.util.Base64;
importar android.util.Log;
importar android.view.View;
importar android.widget.ImageView;
importar android.widget.LinearLayout;
importar android.widget.TextView;
import com.bumptech.glide.Glide;
import com.facebook.AccessToken;
importar com.facebook.CallbackManager;
importar com.facebook.FacebookCallback;
import com.facebook.FacebookException;
importar com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.HttpMethod;
importar com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import org.json.JSONObject;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

clase pública MainActivity extiende AppCompatActivity implementa View.OnClickListener {

CallbackManager callbackManager;
ImageView iv_image, iv_facebook;
TextView tv_name, tv_email, tv_dob, tv_location, tv_facebook;
LinearLayout ll_facebook;
String str_facebookname, str_facebookemail, str_facebookid, str_birthday, str_location;
boolean boolean_login;

@Anular
vacío protegido onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);

en eso();
getKeyHash ();
oyente();
}

init privado vacío () {
iv_image = (ImageView) findViewById (R.id.iv_image);
iv_facebook = (ImageView) findViewById (R.id.iv_facebook);
tv_name = (TextView) findViewById (R.id.tv_name);
tv_email = (TextView) findViewById (R.id.tv_email);
tv_dob = (TextView) findViewById (R.id.tv_dob);
tv_location = (TextView) findViewById (R.id.tv_location);
tv_facebook = (TextView) findViewById (R.id.tv_facebook);
ll_facebook = (LinearLayout) findViewById (R.id.ll_facebook);
FacebookSdk.sdkInitialize (this.getApplicationContext ());
}

oyente privado privado () {
tv_facebook.setOnClickListener (esto);
ll_facebook.setOnClickListener (esto);
iv_facebook.setOnClickListener (esto);

}

privado vacío facebookLogin () {
callbackManager = CallbackManager.Factory.create ();
LoginManager.getInstance (). RegisterCallback (callbackManager, nuevo FacebookCallback () {
@Anular
public void onSuccess (LoginResult loginResult) {
Log.e (“ONSUCCESS”, “ID de usuario:” + loginResult.getAccessToken (). GetUserId ()
+ “\ n” + “Token de autenticación:” + loginResult.getAccessToken (). getToken ()
);
Solicitud GraphRequest = GraphRequest.newMeRequest (loginResult.getAccessToken (),
nuevo GraphRequest.GraphJSONObjectCallback () {
@Anular
public void onCompleted (objeto JSONObject, respuesta GraphResponse) {
tratar {

boolean_login = true;
tv_facebook.setText (“Cerrar sesión de Facebook”);

Log.e (“objeto”, object.toString ());
str_facebookname = object.getString (“nombre”);

tratar {
str_facebookemail = object.getString (“correo electrónico”);
} catch (Excepción e) {
str_facebookemail = “”;
e.printStackTrace ();
}

tratar {
str_facebookid = object.getString (“id”);
} catch (Excepción e) {
str_facebookid = “”;
e.printStackTrace ();

}

tratar {
str_birthday = object.getString (“cumpleaños”);
} catch (Excepción e) {
str_birthday = “”;
e.printStackTrace ();
}

tratar {
JSONObject jsonobject_location = object.getJSONObject (“ubicación”);
str_location = jsonobject_location.getString (“nombre”);

} catch (Excepción e) {
str_location = “”;
e.printStackTrace ();
}

fn_profilepic ();

} catch (Excepción e) {

}
}
});
Parámetros del paquete = new Bundle ();
parámetros.putString (“campos”, “id, nombre, correo electrónico, sexo, cumpleaños, ubicación”);

request.setParameters (parámetros);
request.executeAsync ();
}

@Anular
public void onCancel () {
if (AccessToken.getCurrentAccessToken () == null) {
regreso; // ya desconectado
}
nueva GraphRequest (AccessToken.getCurrentAccessToken (), “/ me / permissions /”, null, HttpMethod.DELETE, nueva GraphRequest
.Llamar de vuelta() {
@Anular
public void onCompleted (GraphResponse graphResponse) {
LoginManager.getInstance (). LogOut ();
LoginManager.getInstance (). LogInWithReadPermissions (MainActivity.this, Arrays.asList (“public_profile, email”));
facebookLogin ();

}
}). executeAsync ();

}

@Anular
public void onError (FacebookException e) {
Log.e (“ON ERROR”, “Error al intentar iniciar sesión”);

AccessToken.setCurrentAccessToken (nulo);
LoginManager.getInstance (). LogInWithReadPermissions (MainActivity.this, Arrays.asList (“public_profile, email, user_birthday”));
}
});
}

@Anular
public void onActivityResult (int requestCode, int resultCode, Intent data) {
super.onActivityResult (requestCode, resultCode, data);

tratar {
callbackManager.onActivityResult (requestCode, resultCode, data);
} catch (Excepción e) {

}

}

privado vacío getKeyHash () {
// Agregar código para imprimir el hash de clave
tratar {
Información de PackageInfo = getPackageManager (). GetPackageInfo (“facebooklocation.facebooklocation”, PackageManager.GET_SIGNATURES);
para (Firma de firma: info.signatures) {
MessageDigest md = MessageDigest.getInstance (“SHA”);
md.update (signature.toByteArray ());
Log.d (“KeyHash:”, Base64.encodeToString (md.digest (), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {

} catch (NoSuchAlgorithmException e) {

}
}

nulo privado fn_profilepic () {

Parámetros del paquete = nuevo paquete ();
params.putBoolean (“redirigir”, falso);
params.putString (“tipo”, “grande”);
nuevo GraphRequest (
AccessToken.getCurrentAccessToken (),
“yo / foto”,
params
HttpMethod.GET,
nuevo GraphRequest.Callback () {
public void onCompleted (respuesta GraphResponse) {

Log.e (“Respuesta 2”, respuesta + “”);

tratar {
String str_facebookimage = (String) response.getJSONObject (). GetJSONObject (“data”). Get (“url”);
Log.e (“Imagen”, str_facebookimage);

Glide.with (MainActivity.this) .load (str_facebookimage) .skipMemoryCache (true) .into (iv_image);

} catch (Excepción e) {
e.printStackTrace ();
}

tv_name.setText (str_facebookname);
tv_email.setText (str_facebookemail);
tv_dob.setText (str_birthday);
tv_location.setText (str_location);

}
}
) .executeAsync ();
}

@Anular
public void onClick (Ver vista) {

if (boolean_login) {
boolean_login = false;
LoginManager.getInstance (). LogOut ();
tv_location.setText (“”);
tv_dob.setText (“”);
tv_email.setText (“”);
tv_name.setText (“”);
Glide.with (MainActivity.this) .load (R.drawable.profile) .into (iv_image);
tv_facebook.setText (“Iniciar sesión con Facebook”);
} más {
LoginManager.getInstance (). LogInWithReadPermissions (MainActivity.this, Arrays.asList (“public_profile, email, user_birthday, user_location”));
facebookLogin ();
}

}

@Anular
nulo protegido en Destroy () {
super.onDestroy ();
LoginManager.getInstance (). LogOut ();
}
}

¡Gracias!

1. Incluya Facebook SDK en su build Gradle (Android Studio)

2. Usando el comando keytool en su consola, obtenga el hash de la clave y proporciónelo a la consola de Facebook.

3. Inicialice ut fb sdk en su actividad principal y luego use permisos para acceder a los registros que desea mostrar.

4. Lea toda la documentación del desarrollador de Facebook para una comprensión profunda.

Esto es lo que está buscando: Llamar a la API Graph