Android facebook会话始终给我关闭登录失败
我已经下载了最新的Facebook SDK,我正在尝试获取用户信息会话。Ispened始终为false,这里有人可以帮助我吗 这是我的代码:Android facebook会话始终给我关闭登录失败,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我已经下载了最新的Facebook SDK,我正在尝试获取用户信息会话。Ispened始终为false,这里有人可以帮助我吗 这是我的代码: public class MainActivity extends Activity { Button login; TextView name; TextView email; ImageView profile; @Override protected void onCreate(Bundle sav
public class MainActivity extends Activity {
Button login;
TextView name;
TextView email;
ImageView profile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// // Add code to print out the key hash
// try {
// PackageInfo info = getPackageManager().getPackageInfo(
// "com.actelme.testfacebook", 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 (NameNotFoundException e) {
//
// } catch (NoSuchAlgorithmException e) {
//
// }
login = (Button) findViewById(R.id.login);
name = (TextView) findViewById(R.id.name);
email = (TextView) findViewById(R.id.email);
profile = (ImageView) findViewById(R.id.picture);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// start Facebook Login
Session.openActiveSession(MainActivity.this, true,
new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session,
SessionState state, Exception exception) {
if (session.isOpened()) {
// 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) {
name.setText(name
.getText()
+ " "
+ user.getName()
+ "!");
email.setText(email
.getText()
+ " "
+ user.asMap()
.get("email")
.toString());
profile.setImageBitmap(getUserPic(user
.getId()));
}
}
}).executeAsync();
}
}
});
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
public Bitmap getUserPic(String userID) {
String imageURL;
Bitmap bitmap = null;
imageURL = "http://graph.facebook.com/" + userID
+ "/picture?type=small";
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageURL)
.getContent());
} catch (Exception e) {
Log.d("TAG", "Loading Picture FAILED");
e.printStackTrace();
}
return bitmap;
}
编辑我已经应用了你的代码,但仍然不工作
public class MainActivity extends Activity {
Session session;
TextView name;
TextView email;
ImageView profile;
StatusCallback statusCallback = (new StatusCallback() {
@SuppressWarnings("deprecation")
@Override
public void call(final Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
name.setText(name.getText() + " " + user.getName()
+ "!");
email.setText(email.getText() + " "
+ user.asMap().get("email").toString());
profile.setImageBitmap(getUserPic(user.getId()));
}
}
});
}
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
Log.d("TAG", "Restoring session");
session = Session.restoreSession(getApplicationContext(), null,
statusCallback, savedInstanceState);
}
if (session == null) {
Log.d("TAG", "Creating new session");
session = new Session(getApplicationContext());
}
Log.d("TAG", "Active session");
Session.setActiveSession(session);
} else {
Log.d("TAG", "Session is null --> " + session.getState().toString());
}
name = (TextView) findViewById(R.id.name);
email = (TextView) findViewById(R.id.email);
profile = (ImageView) findViewById(R.id.picture);
LoginButton authButton = (LoginButton) findViewById(R.id.login_button);
authButton.setOnErrorListener(new OnErrorListener() {
@Override
public void onError(FacebookException error) {
Log.d("TAG", "Error: " + error.getMessage() + " Cause: "
+ error.getCause());
}
});
authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
authButton.setSessionStatusCallback(statusCallback);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
public Bitmap getUserPic(String userID) {
String imageURL;
Bitmap bitmap = null;
imageURL = "http://graph.facebook.com/" + userID
+ "/picture?type=small";
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageURL)
.getContent());
} catch (Exception e) {
Log.d("TAG", "Loading Picture FAILED");
e.printStackTrace();
}
return bitmap;
}
}
编辑2
我已经使用此代码作为教程生成了密钥哈希,然后将其添加到我的应用程序设置中
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.hellofacebook",
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 (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
使用本机登录facebook 按钮xml
<com.facebook.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="14dp" />
控制会话的代码:
session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
DebugLog.log("Restoring session");
session = Session.restoreSession(getApplicationContext(), null, statusCallback, savedInstanceState);
}
if (session == null) {
DebugLog.log("Creating new session");
session = new Session(getApplicationContext());
}
DebugLog.log("Active session");
Session.setActiveSession(session);
} else {
DebugLog.log("Session is null --> " + session.getState().toString());
}
希望能对您有所帮助我已经按照您的建议更新了代码,但仍然不起作用,但您收到了相同的错误?你确定你已经将你的密钥散列放入Facebook应用程序中了吗?我有以下场景,我创建了FB应用程序,然后生成密钥散列并像教程一样配置我的FB应用程序,然后用旧代码和facebook登录屏幕安装我的android应用程序,我添加用户名和密码,然后进入应用程序权限,我允许FB应用程序访问我的信息,用户信息出现,我可以显示名称,然后我关闭应用程序并重新打开它,当我这样做时,应用程序没有运行OK,即没有保存会话或没有被恢复。在代码会话控制中,您正在打印Logcat?我已从已安装的Facebook应用程序注销,然后安装我的应用程序并使用另一个Facebook帐户登录,这也是第一次工作,然后重新打开应用程序并尝试再次登录,但这一次我遇到第二个错误,无效密钥哈希,配置你的应用程序密钥散列,尽管我使用的是同一个应用程序,而且它在第一次使用时就已经开始工作了?
session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
DebugLog.log("Restoring session");
session = Session.restoreSession(getApplicationContext(), null, statusCallback, savedInstanceState);
}
if (session == null) {
DebugLog.log("Creating new session");
session = new Session(getApplicationContext());
}
DebugLog.log("Active session");
Session.setActiveSession(session);
} else {
DebugLog.log("Session is null --> " + session.getState().toString());
}