2013-02-25 42 views
1

嗨我目前正在使用Android的Facebook SDK 3.0。 以下是一些事实。Facebook Android SDK - 使用UiLifecycleHelper时,我应该使用Activity还是Application?

  • 而不是把我的app_id放在AndroidManifest.xml中,我以编程方式在我的java代码中设置该值。因此,我在处理会话时使用类似下面的帮助器方法。

    if (session == null || session.isClosed()) { 
        String applicationId = Persistent.getString(null, SocialUtil.FACEBOOK_APP_ID); 
        session = new Session.Builder(Utils.ctx).setApplicationId(applicationId).build(); 
        Session.setActiveSession(session); 
    } 
    
  • 一旦与Facebook用户登录时,会在许多活动中使用的,这就是为什么我对会议提供的应用程序上下文。

正如您在会话的上下文中看到的,我提供了Utils.ctx,它是一个应用程序对象。 由于Facebook的SDK的本地UiLifecycleHelper与活动产生sesssion当会话不存在,我的应对原UiLifeCycleHelper,只是切换

session = new Session(activity); 

String applicationId = Persistent.getString(null, SocialUtil.FACEBOOK_APP_ID); 
    session = new Session.Builder(Utils.ctx).setApplicationId(applicationId).build(); 

创建了自己的FBIUiLifecycleHelper。

但是,似乎只要会话状态在我的活动中发生变化,回调函数根本就不会被调用。我认为这是因为我在处理会话时使用了应用程序上下文而不是活动上下文。

我的问题是, 1.当您为会话的上下文提供应用程序上下文或活动上下文时,它有什么不同? 2.哪一个是推荐的练习?为什么? 3.让我们说一个用户登录创建与活动上下文的会话。一旦这个会话被设置为setActiveSession(),这个会话是否可以通过调用getActiveSession()在其他活动中使用?也许我真的不必在会话上下文中使用应用程序上下文?

谢谢!

回答

1

对于1.和2.,创建会话的上下文无关紧要,并且可以是任何上下文(应用程序,服务或活动)。但是当你调用任何open *方法时,你必须通过OpenRequest传入Activity或Fragment。如果你的会话不是在状态之间转换,那么这是一个问题(请在实际打开会话时发布更多代码,并确保在Activity或Fragment中重写onActivityResult方法)。

对于3.,是的,你可以从任何地方调用getActiveSession(Activity,Fragment或者其他应用程序中的代码)。

+0

非常感谢你的邀请。其实我遇到的问题是,我有一个UiLifecycleHalper,用在活动A中。在A中,如果用户单击一个按钮,则活动B启动并开始会话打开,然后活动C打开,请求用户的一些发布权限。当C打开时,B调用finish(),C完成后,C也调用finish(),最终显示原始活动A.在这种情况下,奇怪的是A的onResume()被调用,尽管facebook会话更改后,UiLifecycleHelper的回调函数不会被调用。你知道什么是错的吗? – user2062024 2013-02-25 23:29:17

+0

由于回调函数在登录后不被调用,现在我只是在A的onPause()中检查会话状态,并在会话处于登录状态时执行一些操作。我想使用回调函数和UiLifecycleHelper,但因为它没有调用,我正在尝试查找什么是错误的......叹息 – user2062024 2013-02-25 23:30:52

+0

当您跨多个活动执行会话管理时,UiLifecycleHelper中可能存在一个错误。你是否使用相同的活动会话(但只是请求新的权限)? – 2013-02-25 23:48:41

相关问题