Java Facebook认证Android
下面是我的登录功能:Java Facebook认证Android,java,android,facebook,Java,Android,Facebook,下面是我的登录功能: public void facebookLogin() { shareAppPreferences = new AppPreferences(getApplicationContext()); facebook = ((GlobalVars)getApplicationContext()).facebook; String access_token = shareAppPreferences.getAccessToken();
public void facebookLogin()
{
shareAppPreferences = new AppPreferences(getApplicationContext());
facebook = ((GlobalVars)getApplicationContext()).facebook;
String access_token = shareAppPreferences.getAccessToken();
long expires = shareAppPreferences.getAccessExpires();
Log.d("MyTag","token:" +access_token);
if(access_token != null) {
facebook.setAccessToken(access_token);
}
if(expires != 0) {
facebook.setAccessExpires(expires);
}
/*
* Only call authorize if the access_token has expired.
*/
if(!facebook.isSessionValid()) {
Log.d("MyTag","In Authorize");
facebook.authorize(this, new String[] {}, new DialogListener() {
@Override
public void onComplete(Bundle values) {
// new AccessKeyTask().execute("http://37.49.226.66/allaroundme/requests.php");
shareAppPreferences.saveAccessToken(facebook.getAccessToken());
Log.d("MyTag","face token: " +facebook.getAccessToken());
shareAppPreferences.saveAccessExpires(facebook.getAccessExpires());
}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
}
Intent intent = new Intent(this,MainActivity.class);
Log.d("MyTag", "starting activity");
startActivity(intent);
}
我真的不明白为什么这个代码不起作用,在尝试使用该代码之前,我通过facebook应用程序注销了facebook。onComplete()似乎不会发生,并且访问令牌始终为空。但在我第一次登录后,我不必输入信息。这里有人能帮我吗?以下是对我有用的代码:
public void loginToFacebook(){
facebook.authorize(CandyCount.this, new String[]{"publish_stream", "email"}, Facebook.FORCE_DIALOG_AUTH, new DialogListener() {
public void onFacebookError(FacebookError e) {
Toast.makeText(getApplicationContext(), "onFacebookError", Toast.LENGTH_SHORT).show();
}
public void onError(DialogError e) {
Toast.makeText(getApplicationContext(), "onError", Toast.LENGTH_SHORT).show();
}
public void onComplete(Bundle values) {
Editor editor = sp.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires", facebook.getAccessExpires());
editor.commit();
updateButtonStatus();
getName();
}
public void onCancel() {
// TODO Auto-generated method stub
}
});
}
在onCreate中:
sp = getPreferences(MODE_PRIVATE);
access_token = sp.getString("access_token", null);
expires = sp.getLong("access_expires", 0);
getName = sp.getString("name", null);
if (access_token != null){
facebook.setAccessToken(access_token);
fbName.setText("Hello, " + getName);
updateButtonStatus();
}
if (expires != 0){
facebook.setAccessExpires(expires);
}
在updateButtonStatus方法中,我更改了按钮的图像,在单击按钮时,我根据会话是否有效来注销或登录
看看这篇文章,它很好地解释了facebook sdk
显然,您需要修改代码以满足您的特定需求。我希望这有帮助 好的,这段代码可以很好地保存令牌:但是如果我从facebook应用程序注销我的acc,然后启动我的应用程序,它仍然记得我,并且不需要我重新输入facebook信息。你看到问题了吗?我相信Facebook的访问令牌就是这样工作的。一旦你提供信息并登录,它就可以自动让你登录,但不会让你在其他应用(如fb应用)上登录facebook。我注销了facebook应用程序,然后进入我的应用程序,事实上,它可以自动让我登录。不过,当我回到fb应用程序时,我被注销了。这就是它的工作原理