Facebook通过应用程序VS通过Android应用程序中的设备浏览器登录

时间:2014-03-14 14:13:53

标签: android facebook session facebook-graph-api

这个问题一直困扰着我。在我的模拟器上,当然,那里没有facebook应用程序,因此当我触发打开的活动会话时,它会进入我的浏览器。现在,我在带有facebook应用程序的设备上测试它,它会触发应用程序并要求登录。这是问题所在,在模拟器或没有facebook应用程序的设备上,它使用此代码正确识别会话。

Session session = Session.getActiveSession();
    //check if user is logged in at facebook

    if (session != null && session.isOpened()) {
        Log.i("", "Session Open");
        Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

            // callback after Graph API response with user object
            @Override
            public void onCompleted(GraphUser user, Response response) {
              if (user != null) {
                  facebookId = user.getId();
                  loginType = 2;
                  LogMeIn();

              }
            }
          });
    } 
    else 
    {
        Log.i("", "Session Closed");
        // start Facebook Login
        Session.openActiveSession(this, true, new Session.StatusCallback() {

          // callback when session changes state
          @Override
          public void call(Session session, SessionState state, Exception exception) {
            if (session.isOpened()) {
                Log.i("", "Session Open");
              // make request to the /me API
              Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                // callback after Graph API response with user object
                @Override
                public void onCompleted(GraphUser user, Response response) {
                  Log.i("", "Complete");
                  if (user != null) {
                      facebookId = user.getId();
                      loginType = 2;
                      LogMeIn();

                  }
                }
              });
            }
            else
            {
                Log.i("", "Session Closed");
            }
          }
        });
    }

但是在具有faceboook应用程序的设备中,会话始终为null。所以倾向于再次启动Session.openActiveSession,每当我检查它时,我总是会关闭一个会话。有什么想法的家伙有什么问题?我的方法是错误的,这就是为什么它只能通过浏览器登录facebook?任何帮助将得到充分的赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

您是否在Facebook SDK中启用了会话跟踪?您需要在UiLifecycleHelper Activity中创建onCreate()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(getActivity(), callback);
    uiHelper.onCreate(savedInstanceState);
}

传递给构造函数的callback与您在上面的代码中创建的相同(您是匿名的)。

在此之后,您需要将Activity生命周期方法中的匹配调用发送到UiLifecycleHelper的相同调用。这将允许Facebook SDK跟踪您的会话。

@Override
public void onResume() {
    super.onResume();
    uiHelper.onResume();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

您可以在tutorial中找到更多详细信息。你可能跟着他们更简单的"入门"教程而不是更深入的"登录"一。用户是否通过应用程序登录(因为它已安装)或浏览器不应影响会话跟踪(如果已正确设置)。