有时在Facebook 3.0无法上传照片?

时间:2013-03-28 19:28:40

标签: android facebook

我正在尝试使用sdk 3.0在Facebook上发布图片,但我遇到了一些问题。如果我关闭应用程序并重新打开应用程序它总是进入其他条件,然后它进入条件。我是否需要保存session或已存储的?

          Session mSession = Session.getActiveSession();

    if (mSession != null
            && mSession.getPermissions().contains("publish_actions")) {
        postPhoto();

    } else {

        if (mSession == null) {

            Log.d("Facebook", "Session null");
            mSession = new Session.Builder(this).setApplicationId(
                    "xxxxxxxxxxxxxxx").build();
            Session.setActiveSession(mSession);

        }
        if (!mSession.isOpened()) {

            Log.d("Facebook", "Session not opened");

            Session.OpenRequest sessionRequest = new Session.OpenRequest(
                    this);

            sessionRequest.setPermissions(PERMISSIONS);
            sessionRequest.setCallback(statuscallback);
            sessionRequest
                    .setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
            mSession.openForPublish(sessionRequest);

        }

    }

StatusCallback statuscallback = new StatusCallback() {

        @Override
        public void call(Session session, SessionState state,
                Exception exception) {
            // TODO Auto-generated method stub

            if (session.isOpened()) {

                Log.d("Facebook", "Logged in");
                postPhoto();

            }
            if (session.isClosed()) {

                Log.d("Facebook", "Logged out");
            }
        }
    };



   @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            Session.getActiveSession().onActivityResult(this, requestCode,
                    resultCode, data);

            Log.d("Facebook", "onActivity Result");
        }

如果我需要注销用户怎么办?

我尝试了以下代码onDestroy()

if (mSession.isOpened())
   mSession.closeAndClearTokenInformation();

每当我下次打开应用程序时,如果我在destroy方法中使用上面的代码,它总会在此行引发错误

mSession.openForPublish(sessionRequest);

请帮帮我们。答案/建议非常值得注意。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用UiLifecycleHelper来帮助管理整个活动或片段生命周期中的活动会话。通常,所有与会话相关的数据(访问令牌,权限等)都会被缓存,如果您创建一个新的Session(),它将使用缓存的数据(除非您调用closeAndClearTokenInformation,在这种情况下它会清除缓存)。我只会在用户显式注销时调用closeAndClearTokenInformation(),否则只需在onDestroy()中调用close()。

我也会避免调用openForPublish。始终执行openForRead,然后调用session.getPermissions()来检查您是否具有必要的权限,然后在需要更多时调用requestNewPublishPermissions。