Android - 使用 ParseFacebookUtils.logIn 时 Facebook session 关闭

标签 android facebook session parse-platform parsefacebookutils

我在我的 Android 应用程序中使用 Facebook 和 Parse SDK。我关注了this Facebook 登录和身份验证教程,根据 中的 session 状态是否为 OPENEDlogin fragmentma​​in menu fragment fragment 之间切换> session .StatusCallback。在与 Parse 集成之前,该应用程序可以完美运行。

现在我遇到了一个问题。在主菜单 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 数据库中,这样我就可以使用 ParseUserput之后获取数据。但问题发生在使用 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/

相关文章:

android - 警告 : "integer constant too large for long type" . .. 但它是一个 uint64_t?

ios - 如果用户在登录后更改了他的 facebook 个人资料详细信息,如何在我的应用程序中更新 facebook 个人资料?

android - 使用 AsyncTask 打开相机

java - 如何将AWS Lambda函数的结果返回到Android应用程序?

java - 如何在android studio中解决 "Manifest merger failed:"

ASP.NET MVC : how to prevent a session lock?

javascript - 如何使用 Liberty 更改生成的 JSESSIONID 的长度?

Javascript - Cordova 应用程序中带有 facebook 插件的 Facebook 消息 - 方法 : "send"

用于获取帖子的 "likes, shares, comments"的 facebook 图形 API 端点

java - DBD::Oracle 如何在连接前设置 v$session.program