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

Posted

技术标签:

【中文标题】Facebook通过应用程序登录VS通过Android应用程序中的设备浏览器登录【英文标题】:Facebook login via app VS via device browser in android app 【发布时间】:2014-04-19 21:22:46 【问题描述】:

这个问题一直困扰着我。当然,在我的模拟器上,那里没有 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");
            
          
        );
    

但是,在具有 Facebook 应用程序的设备中,会话始终为空。因此,趋势是再次启动 Session.openActiveSession 并且每次检查时我总是最终关闭会话。有什么想法的家伙有什么问题吗?我的方法是否错误,这就是为什么它只能在通过浏览器登录 facebook 时运行良好?任何帮助将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

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

@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 中找到更多详细信息。您可能遵循了他们更简单的“入门”教程,而不是更深入的“登录”教程。无论用户是通过应用程序登录(因为它已安装)还是浏览器都不会影响会话跟踪(如果您已正确设置)。

【讨论】:

以上是关于Facebook通过应用程序登录VS通过Android应用程序中的设备浏览器登录的主要内容,如果未能解决你的问题,请参考以下文章

Facebook通过iOS中的Facebook SDK通过应用程序登录?

Parse - 通过 Facebook 应用程序登录 Facebook

Facebook 登录(网络)看不到通过 facebook 设备应用程序登录的用户

如何在 React Native 中进行 Facebook 登录?

通过 Facebook 登录不适用于我的 iOS 应用程序 [重复]

通过 Facebook 登录