我在我的 Android 应用程序中使用 Facebook 和 Parse SDK。我关注了this Facebook 登录和身份验证教程,根据 中的 session 状态是否为
。在与 Parse 集成之前,该应用程序可以完美运行。 OPENED
在 login fragment 和 main menu fragment fragment 之间切换> session .StatusCallback
现在我遇到了一个问题。在主菜单 fragment 的 onResume()
方法中,我添加了以下代码。
final Session session = Session.getActiveSession();
if(session != null && session.isOpened()) {
Request meRequest = Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser graphUser, Response response) {
if(session == Session.getActiveSession()) {
// Check if the session is same as usual
ParseFacebookUtils.logIn(graphUser.getId(), session.getAccessToken(),
session.getExpirationDate(), new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
if (user == null) {
// The user wasn't saved.
System.out.println("User was not saved to Parse. ");
} else {
// The user has been saved to Parse.
System.out.println("User has successfully been saved to Parse.");
if (user.isNew()) {
// This user was created during this session with Facebook Login.
System.out.println("ParseUser created.");
} else {
// This user existed before.
System.out.println("User exists in Parse. Pull their values: " + user);
}
}
}
});
}
}
});
meRequest.executeAsync();
}
因此,当 fragment 恢复并打开 Facebook session 时,Facebook 用户被添加到 Parse 数据库中,这样我就可以使用 ParseUser
来put
和 之后获取
数据。但问题发生在使用 ParseFacebookUtils.logIn()
时,它使 Facebook session CLOSED
并调用 Session.StatusCallback
,从而切换可见 fragment 回到登录 fragment 。
我整天都在处理这个问题,但找不到解决方案。我在 Application 中添加了以下代码但还是不行。
Parse.enableLocalDatastore(this);
Parse.initialize(this, Application_id, Client_key);
ParseFacebookUtils.initialize(getString(R.string.facebook_app_id));
有办法解决这个问题吗?我读过this但没有提供很好的解决方案。提前致谢!
最佳答案
我今天也想做同样的事情。我正在使用 facebook sdk 的 UiLifecycleHelper 进行 facebook 登录,发出图形 api 请求并将用户添加到 Parse db。这就是您提到的示例中的完成方式 - 我认为这有点过时了。
ParseFacebookUtils 处理 session ,我们需要做的就是调用它的登录方法,进行图形 API 调用,获取电子邮件等用户数据并更新用户字段。
这是一些代码:
private void parseFacebookLogin(){
ParseFacebookUtils.logIn(this, PARSE_FB_LOGIN_CODE, new LogInCallback() {
@Override
public void done(ParseUser user, ParseException err) {
if (user == null) {
Log.d(tag, "Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.d(tag, "User signed up and logged in through Facebook!");
Request.newMeRequest(ParseFacebookUtils.getSession(), graphUserCallback).executeAsync();
} else {
Log.d(tag, "User logged in through Facebook!");
}
}
});
}
GraphUserCallback graphUserCallback = new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null){
getUserDataFacebook(user);
Log.d(tag, response.toString());
}
}
};
private void getUserDataFacebook(GraphUser user){
//get user data here
}
在 Facebook login 上查看 Parse 的文档.
让我知道这是否适合您。
关于Android - 使用 ParseFacebookUtils.logIn 时 Facebook session 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27744794/