Java Can';t注销后使用Facebook凭据重新登录
我有一个Android应用程序,允许用户使用Facebook凭据登录。一旦他们第一次注销,他们就不能再次登录。在从Facebook的网站上清除应用程序的权限后,登录即可正常工作 我使用Java Can';t注销后使用Facebook凭据重新登录,java,android,facebook,facebook-login,facebook-android-sdk,Java,Android,Facebook,Facebook Login,Facebook Android Sdk,我有一个Android应用程序,允许用户使用Facebook凭据登录。一旦他们第一次注销,他们就不能再次登录。在从Facebook的网站上清除应用程序的权限后,登录即可正常工作 我使用login按钮登录 需要能够访问登录信息的活动,请扩展此AuthActivityActivity public class AuthActivity extends Activity { private AuthUtils authUtils; @Override protected vo
login按钮登录
需要能够访问登录信息的活动,请扩展此AuthActivity
Activity
public class AuthActivity extends Activity {
private AuthUtils authUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
authUtils = new AuthUtils(this);
authUtils.onCreate(savedInstanceState);
}
public AuthUtils getAuthUtils() {
return authUtils;
}
@Override
public void onStart() {
super.onStart();
authUtils.onStart();
}
@Override
public void onStop() {
super.onStop();
authUtils.onStop();
}
@Override
public void onResume() {
super.onResume();
authUtils.onResume();
}
@Override
public void onPause() {
super.onPause();
authUtils.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
authUtils.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
authUtils.onSaveInstanceState(outState);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
authUtils.onActivityResult(requestCode, resultCode, data);
}
}
AuthUtils看起来像这样。我去掉了所有与Google+登录相关的东西,以及所有与登录过程无关的东西,比如用我的应用程序首选项保存用户信息
public class AuthUtils implements ConnectionCallbacks, OnConnectionFailedListener {
private final Activity activityContext;
private UiLifecycleHelper facebookUiHelper;
public AuthUtils(Activity context) {
this.activityContext = context;
facebookUiHelper = new UiLifecycleHelper(context, facebookStatusCallback);
}
public void signInFacebook() {
LoginButton facebookLoginButton = new LoginButton(activityContext);
facebookLoginButton.setReadPermissions(Arrays.asList("email"));
facebookLoginButton.performClick();
}
public void signOutFacebook() {
Session facebookSession = Session.getActiveSession();
if(facebookSession != null) {
facebookSession.closeAndClearTokenInformation();
}
}
private StatusCallback facebookStatusCallback = new StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
if(state.isOpened()) {
Request.newMeRequest(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
String email = "";
if(user.asMap().containsKey("email")) {
email = user.getProperty("email").toString();
} else {
// ... not related to login
}
// Some actions here, not related to login.
}
});
} else if(state.isClosed()) {
// ... not related to login
}
}
};
public void onCreate(Bundle savedInstanceState) {
facebookUiHelper.onCreate(savedInstanceState);
}
public void onResume() {
facebookUiHelper.onResume();
}
public void onPause() {
facebookUiHelper.onPause();
}
public void onDestroy() {
facebookUiHelper.onDestroy();
}
public void onSaveInstanceState(Bundle outState) {
facebookUiHelper.onSaveInstanceState(outState);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
facebookUiHelper.onActivityResult(requestCode, resultCode, data);
}
}
即使在运行Facebook的示例应用程序时,我也遇到了同样的问题。我通过向Facebook提供默认签名密钥解决了这一问题:在的示例应用程序的开发者设置中,然后在Android平台的应用程序设置中
Facebook提供了一种获取默认密钥的简单方法,可在“疑难解答”下找到。下面提供了运行Hello Facebook示例应用程序时执行此操作的代码
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) {
}
注意:发布应用程序时,不应使用默认密钥,而应使用自己的密钥生成和签署应用程序。能否请您详细解释“无法再次登录”。什么不起作用?没有对话,或者他们不能接受?您是否收到API响应/错误?请提供更多信息@Flaxfield当点击按钮时,Facebook应用程序将打开,并保持活动状态几秒钟,但没有显示任何内容。然后它关闭并调用状态回调侦听器state.isClosed()
保持为真。谢谢!您还可以显示使用LoginButton的代码吗。您请求什么权限?@Flaxfield在代码中我所做的是:facebookLogin.setReadPermissions(Arrays.asList(“email”)代码>。在布局中,我只需指定按钮并添加一些尺寸和位置。在没有该电子邮件权限的情况下也会发生此问题。首次成功登录后,您是否将这些凭据保存在任何位置?