![](/img/trans.png)
[英]How to get a list of user photo albums using the Facebook Graph API on Android
[英]how to get location of facebook user using Graph API for android
我可以使用以下代碼獲取姓名、電子郵件、性別和出生日期
loginButton.setReadPermissions(Arrays.asList("public_profile, email, user_birthday, user_friends,user_location")); //我還添加了user_location
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
Log.v("LoginActivity", response.toString());
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,location"); //and location parameter
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// App code
Log.v("LoginActivity", "cancel");
}
@Override
public void onError(FacebookException exception) {
// App code
Log.v("LoginActivity", exception.getCause().toString());
}
});
但它只返回以下值。
07-22 12:53:05.639: E/Fb data(6560): {"id":"989472891104","name":"Karan Mer","email":"karan_mer2012@yahoo.co.in","gender":"male"}
我怎么能得到那個???
如果沒有在 facebook 上提交應用程序進行審核,我們將無法獲取 facebook 用戶的位置。 但出於測試目的,您可以獲取 App Developer、Admin 或 Tester 的位置。
從這里下載源代碼( 在 android 中使用 Graph API 獲取 facebook 用戶的位置)
添加此依賴項:
compile 'com.facebook.android:facebook-android-sdk:4.0.1'
活動_main.xml
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="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:orientation="horizontal"
android:layout_height="wrap_content">
<TextView
android:layout_width="100dp"
android:layout_height="40dp"
android:text="Name"
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="Name"
android:textSize="15dp"
android:id="@+id/tv_name"
android:gravity="center_vertical"
android:textColor="#000000"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="100dp"
android:layout_height="40dp"
android:text="Email"
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="Email"
android:gravity="center_vertical"
android:textSize="15dp"
android:id="@+id/tv_email"
android:textColor="#000000"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="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>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="100dp"
android:layout_height="40dp"
android:text="Location"
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="location"
android:gravity="center_vertical"
android:textSize="15dp"
android:id="@+id/tv_location"
android:textColor="#000000"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"/>
</LinearLayout>
<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="Login with 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="center"
/>
</LinearLayout>
</LinearLayout>
主活動.java
package facebooklocation.facebooklocation;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.HttpMethod;
import 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;
public class MainActivity extends AppCompatActivity implements 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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
getKeyHash();
listener();
}
private void init() {
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());
}
private void listener() {
tv_facebook.setOnClickListener(this);
ll_facebook.setOnClickListener(this);
iv_facebook.setOnClickListener(this);
}
private void facebookLogin() {
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.e("ONSUCCESS", "User ID: " + loginResult.getAccessToken().getUserId()
+ "\n" + "Auth Token: " + loginResult.getAccessToken().getToken()
);
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
boolean_login = true;
tv_facebook.setText("Logout from Facebook");
Log.e("object", object.toString());
str_facebookname = object.getString("name");
try {
str_facebookemail = object.getString("email");
} catch (Exception e) {
str_facebookemail = "";
e.printStackTrace();
}
try {
str_facebookid = object.getString("id");
} catch (Exception e) {
str_facebookid = "";
e.printStackTrace();
}
try {
str_birthday = object.getString("birthday");
} catch (Exception e) {
str_birthday = "";
e.printStackTrace();
}
try {
JSONObject jsonobject_location = object.getJSONObject("location");
str_location = jsonobject_location.getString("name");
} catch (Exception e) {
str_location = "";
e.printStackTrace();
}
fn_profilepic();
} catch (Exception e) {
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, name, email,gender,birthday,location");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
if (AccessToken.getCurrentAccessToken() == null) {
return; // already logged out
}
new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
LoginManager.getInstance().logOut();
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email"));
facebookLogin();
}
}).executeAsync();
}
@Override
public void onError(FacebookException e) {
Log.e("ON ERROR", "Login attempt failed.");
AccessToken.setCurrentAccessToken(null);
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email,user_birthday"));
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
callbackManager.onActivityResult(requestCode, resultCode, data);
} catch (Exception e) {
}
}
private void getKeyHash() {
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo("facebooklocation.facebooklocation", PackageManager.GET_SIGNATURES);
for (Signature signature : 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) {
}
}
private void fn_profilepic() {
Bundle params = new Bundle();
params.putBoolean("redirect", false);
params.putString("type", "large");
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"me/picture",
params,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
Log.e("Response 2", response + "");
try {
String str_facebookimage = (String) response.getJSONObject().getJSONObject("data").get("url");
Log.e("Picture", str_facebookimage);
Glide.with(MainActivity.this).load(str_facebookimage).skipMemoryCache(true).into(iv_image);
} catch (Exception e) {
e.printStackTrace();
}
tv_name.setText(str_facebookname);
tv_email.setText(str_facebookemail);
tv_dob.setText(str_birthday);
tv_location.setText(str_location);
}
}
).executeAsync();
}
@Override
public void onClick(View view) {
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("Login with Facebook");
} else {
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile,email,user_birthday,user_location"));
facebookLogin();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
LoginManager.getInstance().logOut();
}
}
private void facebookLogin() {
callbackManager=CallbackManager.Factory.create();
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
getProfileDetail(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.e("CANCEL : ","CANCEL");
// App code
if (AccessToken.getCurrentAccessToken() == null) {
return; // already logged out
}
new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
LoginManager.getInstance().logOut();
LoginManager.getInstance().logInWithReadPermissions(FacebookActivity.this, Arrays.asList("public_profile,email"));
facebookLogin();
}
}).executeAsync();
}
@Override
public void onError(FacebookException exception) {
// App code
AccessToken.setCurrentAccessToken(null);
LoginManager.getInstance().logInWithReadPermissions(FacebookActivity.this, Arrays.asList("public_profile,email,user_birthday"));
Log.e("ERROR : ",exception.toString());
}
});
}
private void getProfileDetail(AccessToken accessToken) {
GraphRequest graphRequest=GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
String name = null;
String email = null;
String profileImage_link = null;
String user_id = null;
String location = null;
try {
if (object.has("name"))
{
name=object.getString("name");
}
if (object.has("email"))
{
email=object.getString("email");
}
if (object.has("id"))
{
user_id=object.getString("id");
}
profileImage_link=object.getJSONObject("picture").getJSONObject("data").getString("url");
Log.e("PICTURE URL : ",profileImage_link);
Log.e("Detail : ","Name : "+name+ " Email : "+email+ " User_id : "+user_id+" Location : "+location);
} catch (JSONException e) {
e.printStackTrace();
}
Log.e("Object : ",object.toString());
tv_response.setText(object.toString());
String str_birthday =null;
String str_location=null;
try {
str_birthday = object.getString("birthday");
} catch (Exception e) {
str_birthday = "";
e.printStackTrace();
}
try {
JSONObject jsonobject_location = object.getJSONObject("location");
str_location = jsonobject_location.getString("name");
} catch (Exception e) {
str_location = "";
e.printStackTrace();
}
Log.e("LOCATION : ",str_location+" "+str_birthday);
}
});
Bundle bundle = new Bundle();
bundle.putString(
"fields",
"id,name,link,email,gender,picture.type(large),last_name,first_name,locale,timezone,updated_time,verified,birthday,location"
);
graphRequest.setParameters(bundle);
graphRequest.executeAsync();
}
首先,您需要為此提供 user_location
然后在你的
public void onCompleted(JSONObject object,GraphResponse response){
JSONObject jsonObj = response.getGraphObject().getInnerJSONObject();
GraphUser user = GraphObject.Factory.create(jsonObj,GraphUser.class);
if (user.getLocation() != null && getLocation().getProperty("name")!= null) {
userObject.userCity = user.getLocation().getProperty("name").toString();
}
}
這對我有用,希望這對你有用
注意:為了獲取用戶位置,您可能必須執行 facebook 審查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.