正确的方法来创建Facebook会话登录?

时间:2013-04-22 23:04:44

标签: java android facebook facebook-login facebook-android-sdk

所以,我有一个带有“分享”按钮的Dialog。按下按钮时,如果用户已登录Facebook,则会调用共享用户信息的方法。但是,如果他们没有登录Facebook,我希望首先允许用户登录然后分享他们的信息。这是我尝试在没有LoginButton的情况下登录用户:

    Session.OpenRequest openRequest = new Session.OpenRequest(GameActivity.this);
                    StatusCallback callback = new StatusCallback(){

                        @Override
                        public void call(Session session, SessionState state, Exception exception) {
                            Log.d(TAG, "CALL");
                            if (Session.getActiveSession() != null && Session.getActiveSession().isOpened()){
                                Log.d(TAG, "sendBrag was called");
                                sendBrag();
                            }else{
                                Log.d(TAG, "session is not opened");
                            }
                            if (exception != null){
                                Log.d(TAG, "caught exception in call method");
                            }
                        }
                    };
                    openRequest.setCallback(callback);
                    openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
                    openRequest.setPermissions(PERMISSIONS);
                    Session session = new Session(GameActivity.this);
                    session.openForPublish(openRequest);
                    Session.setActiveSession(session);

其中,PERMISSIONS是:

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");

问题是它永远不会登录!我要么收到一条Toast消息,说明“检查你的网络连接”(即使我的网络连接正常)或没有任何反应。但是从日志中我可以看出Session永远不会打开。 总结一下:如何使用Session课程正确登录Facebook?我在这里错过了什么?任何帮助,建议或建议将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:4)

我找到了SessionLoginSampleFacebook SDK位于onCreate内的示例文件夹中的问题的解决方案。首先,在我的活动中的 Session session = Session.getActiveSession(); if (session == null) { if (savedInstanceState != null) { session = Session.restoreSession(this, null, statusCallback, savedInstanceState); } if (session == null) { session = new Session(this); } Session.setActiveSession(session); if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); } } 方法中,我输入以下代码:

statusCallback

private Session.StatusCallback statusCallback = new SessionStatusCallback(); 的位置:

SessionStatusCallback

我的活动中的 private class SessionStatusCallback implements Session.StatusCallback { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened() && session != null){ sendBrag(); } } }//end of SessionStatusCallback class 内部课程是:

Facebook

然后,如果用户尚未登录,我创建了一个处理登录 private void onClickLogin() { Session session = Session.getActiveSession(); if (!session.isOpened() && !session.isClosed()) { session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); } else { Session.openActiveSession(this, true, statusCallback); } }//end of onClickLogin() method 的方法:

onActivityResult()

我从“分享”按钮拨打了电话。最后,我认为这是代码中最重要的部分(我相信这可能是我之前遇到错误的地方,因为我的代码中没有这个),是 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); }//end of onActivityResult() method 方法:< / p>

openForRead

这就是他们真正的意思。虽然,我不知道为什么它完全有效,因为我使用方法openForPublish而不是{{1}},但它似乎工作。我希望这证明对于遇到我遇到的同样问题的人有帮助。