您好我目前正在使用适用于 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 在会话不存在时使用 Activity 创建会话,因此我通过处理原始 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()在其他活动中使用吗?也许我真的不必为会话上下文使用应用程序上下文?
谢谢!