如果用户曾经登录过,如何在android应用程序中向Facebook提供自动登录?
我在我的android应用程序中使用图形api来连接到facebook.Now我正在做的是为我的Facebook类创建一个实例,并且每次从主活动调用登录方法。如果用户使用应用程序登录一次,并且当用户打开应用程序下一次,就应该直接登录使用以前活跃的Facebook session..How做到这一点?Sombody请帮助...如果用户曾经登录过,如何在android应用程序中向Facebook提供自动登录?
登录按钮单击方法
public void onBtnClicked(View v){
if(v.getId() == R.id.btnLogin)
{
FacebookClass na = new FacebookClass(this);
na.login();
}
}
这是我的登录方法
public void login()
{
// start Facebook Login
Session.openActiveSession(mContext, true, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
sessionState = true;
Toast.makeText(mContext, "Access token :" + session.getAccessToken() + "\n" +"Expires at "+session.getExpirationDate().toLocaleString(), Toast.LENGTH_LONG).show();
Log.i("sessionToken", session.getAccessToken());
Log.i("sessionTokenDueDate", session.getExpirationDate().toLocaleString());
access_token =session.getAccessToken();
pref = mContext.getPreferences(0);
edt = pref.edit();
Editor prefsEditor = pref.edit();
edt.putString("Access token", access_token);
edt.commit();
/**
* getting user's name and location
*/
// make request to the /me API
Request.newMeRequest(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null)
{
dispname = user.getName();
id = user.getId();
Object userLocation = user.getLocation();
Log.i("Profile information", ""+response);
String strLocation = (userLocation != null)? ((GraphObject) userLocation).getProperty("name").toString() : "No location found";
//location.setText("Lives in " + strLocation + "!");
disploc = strLocation;
edt.putString("Username", dispname);
edt.putString("Location", disploc);
edt.commit();
((MainActivity)mContext).dispatchInformations(dispname,disploc);
}
}
}).executeAsync();
/**
* Getting user's profile picture
*/
Bundle params = new Bundle();
params.putBoolean("redirect", false);
params.putString("type", "normal");
params.putString("height", "200");
params.putString("width", "200");
new Request(
Session.getActiveSession(),
"/me/picture",
params,
HttpMethod.GET,
new Request.Callback() {
public void onCompleted(Response response) {
/* handle the result */
Log.i("Profile pic", ""+response);
GraphObject graph=response.getGraphObject();
JSONObject jsonObj=graph.getInnerJSONObject();
JSONObject object;
String imageURL;
try {
object = jsonObj.getJSONObject("data");
imageURL=object.getString("url");
new DownloadImageTask().execute(imageURL);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
).executeAsync();
}
}
private boolean isSubsetOf(Collection<String> subset,
Collection<String> superset) {
for (String string : subset) {
if (!superset.contains(string)) {
return false;
}
}
return true;
}
});
}
您可以Session.getActiveSession();
检查例如使用这里面onCompleted()
方法
Session facebooksession = Session.getActiveSession();
if(facebooksession != null) {
//Second time login
}
else{
//First time login
}
我得到空总是:(但其登录...如何解决这个问题?有什么与onActivityResult有关吗?请帮助 – Nevaeh 2014-12-05 08:27:59
@Nevaeh您添加了我的代码'onCompleted()'方法内?如果用户第一次通过你的应用程序登录,那么它将为空,如果相同的用户登录到应用程序第二次,那么它不会为空 – 2014-12-05 09:25:31
我会解释。我有一个类的Facebook登录和获取details.I在我的主要活动写了onActivityResult方法。问题的第一个代码片段是从我的主要活动,第二是从我的Facebook类.so,我的问题是,我想检查是否有任何活动会话时应用程序启动。如果是,那么我想要显示名称和图片自动在我的左menu.else,我想显示一个登录按钮。我希望你明白我tell.please回复 – Nevaeh 2014-12-05 09:42:52
在第一次登录,在sharedpref设置。然后检查您是否再次访问SharedPref值是否可用。如果是的话,执行登录Facebook的那个值.. – Riser 2014-12-04 07:26:34