繁体   English   中英

Facebook Android SDK-使用UiLifecycleHelper时,应该使用“活动”还是“应用程序”作为上下文?

[英]Facebook Android SDK - When using UiLifecycleHelper, should I use Activity or Application for context?

嗨,我目前正在使用Android的Facebook SDK 3.0。 首先是一些事实。

  • 不用将我的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在会话不存在时使用活动创建会话,因此我通过处理原始UiLifeCycleHelper并切换来创建了自己的FBIUiLifecycleHelper

    session = new Session(activity);

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

但是,似乎每当会话状态在我的活动中更改时,都根本不会调用回调函数。 我认为这是因为我在处理会话时使用了应用程序上下文而不是活动上下文。

我的问题是:1.为会话的上下文提供应用程序上下文或活动上下文时,它有何不同? 2.什么时候是推荐做法? 为什么? 3.假设用户登录使用活动上下文创建了会话。 一旦通过setActiveSession()将该会话设置为会话,是否可以通过调用getActiveSession()在其他活动中使用此会话? 也许我不是真的必须将应用程序上下文用于会话上下文吗?

谢谢!

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

对于3.,是的,您可以从任何地方(活动,片段或应用程序中的任何其他代码)调用getActiveSession。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM