[英]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.