我想使用图表Api进行facebook登录,因为我想要user_birthday和user_location。在我使用此链接登录之前: http://www.androidhive.info/2012/03/android-facebook-connect-tutorial/
但我没有得到出生日期和地点等其他信息。所以我正在接近图Api。但是没有找到任何教程。我尝试了一些链接并构建了一些代码,但是将session变为null。我确信这是一个实施问题。这是我的代码:
fbLogin.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
try {
openActiveSession(LoginScreenActivity.this, true, fbStatusCallback, Arrays.asList(
new String[] { "email", "user_location", "user_birthday"}), savedInstanceState);
}
catch (Exception e) {
Log.i("exception", e.getMessage());
}
Intent intent=new Intent(LoginScreenActivity.this,DealGaliTabActivity.class);
startActivity(intent);
}
});
private Session openActiveSession(Activity activity, boolean allowLoginUI,
StatusCallback callback, List<String> permissions, Bundle savedInstanceState) {
OpenRequest openRequest = new OpenRequest(activity)
.setPermissions(permissions).setLoginBehavior(SessionLoginBehavior
.SSO_WITH_FALLBACK).setCallback(callback)
.setDefaultAudience(SessionDefaultAudience.FRIENDS);
Session session = Session.getActiveSession();
Log.d("session", "" + session);
if (session == null) {
Log.d("sussion_Null", "" + savedInstanceState);
if (savedInstanceState != null) {
session = Session.restoreSession(this, null, fbStatusCallback, savedInstanceState);
}
session = Session.openActiveSessionFromCache(LoginScreenActivity.this);
Session.setActiveSession(session);
Log.d("sessionSet", "" + session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || allowLoginUI) {
session.openForRead(openRequest);
return session;
}
}
return session;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
private Session.StatusCallback fbStatusCallback = new Session.StatusCallback() {
public void call(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
Request.newMeRequest(session, new Request.GraphUserCallback() {
public void onCompleted(GraphUser user, Response response) {
if (response != null) {
Log.i("Graphresponse", response.toString());
try{
get_id = user.getId();
get_name = user.getName();
get_gender = (String) user.getProperty("gender");
get_email = (String) user.getProperty("email");
get_birthday = user.getBirthday();
get_locale = (String) user.getProperty("locale");
get_location = user.getLocation().toString();
Log.d("GraphSelected", user.getId() + "; " +
user.getName() + "; " +
(String) user.getProperty("gender") + "; " +
(String) user.getProperty("email") + "; " +
user.getBirthday()+ "; " +
(String) user.getProperty("locale") + "; " +
user.getLocation());
} catch(Exception e) {
e.printStackTrace();
Log.d("GraphException", e.getMessage());
}
}
}
});
}
}
};
我第一次登录时也没有获得Facebook屏幕。请给我一些解决方案。
答案 0 :(得分:1)
我不确定getBirthday()
,getLocation()
是否为有效方法,但您可以直接访问这些属性 -
get_birthday = (String) user.getProperty("birthday");
get_location = (String) user.getProperty("location").getProperty("name");
我也不确定user.getProperty("location").getProperty("name")
是否有效,实际上位置的响应是这样的:
"location": {
"id": 123456789,
"name": "Blah"
}
这应该是你的生日和地点。
此外,检查您是否可以在app settings
中查看是否授予了bday和位置权限答案 1 :(得分:1)
这就是我想要的......我希望这会对其他人有所帮助......
public void readData(){
if (Session.getActiveSession() == null
|| Session.getActiveSession().isClosed()) {
Session.openActiveSession(this, true, new StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
System.out.println("State= " + state);
if (session.isOpened()) {
System.out.println("Token=" + session.getAccessToken());
if(session.getAccessToken() != null){
sharedPrefernces();
}
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
public void onCompleted(GraphUser user, Response response) {
if (response != null) {
Log.i("Graphresponse", response.toString());
try{
get_id = user.getId();
get_name = user.getName();
get_gender = (String) user.getProperty("gender");
get_email = (String) user.getProperty("email");
get_birthday = user.getBirthday();
get_locale = (String) user.getProperty("locale");
get_location = user.getLocation().toString();
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+get_id+"/picture?type=large");
mImage = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
Log.d("GraphSelected", get_id + " " +
get_name + " " +
get_gender + " " +
get_email + " " +
get_birthday + " " +
get_locale + " " +
get_location);
} catch(Exception e) {
e.printStackTrace();
Log.d("GraphException", e.getMessage());
}
}
}
});
}
if (exception != null) {
System.out.println("Some thing bad happened!");
exception.printStackTrace();
}
}
});
}
}