当前位置: 代码迷 >> Android >> 通过应用VS通过Android应用中的设备浏览器登录Facebook
  详细解决方案

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

热度:174   发布时间:2023-08-04 12:48:16.0

这个问题困扰着我很多。 当然,在我的模拟器上没有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时能很好地工作的原因? 任何帮助将不胜感激。 谢谢!

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

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

传递到构造函数中的callback与您在上面的代码中创建的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);
}

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

  相关解决方案