适用于Android的Facebook SDK – 以编程方式设置应用程序ID

我有一个原生的Android应用程序需要连接到一个不同的Facebook应用程序(不同的应用程序ID)的基础上,可以在运行时更改的应用程序设置。

想象一下,应用程序可以设置为指向DEV,TEST或PROD。 当指向DEV时,FB应用程序ID应为“1”。 当指向TEST时,FB应用程序ID应该是“2”。 等等

问题是来自Facebook SDK的UiLifecycleHelper在onCreate阶段自动从AndroidManifest.xml中读取“com.facebook.sdk.ApplicationId”。 似乎没有办法以编程方式进行设置。

是否可以使用UiLifecycleHelper并在运行时指向不同的应用程序ID,还是必须退回到手动pipe理会话?

Solutions Collecting From Web of "适用于Android的Facebook SDK – 以编程方式设置应用程序ID"

你好,我所知道的上面的答案是正确的older sdk version ,但在facebook sdk 4中没有Session

你可以简单地使用这个单行代码来完成:

 FacebookSdk.setApplicationId(APP_ID); 

谢谢!

在这里,我用来设置应用程序ID程序化

  private Session.StatusCallback statusCallback = new SessionStatusCallback(); protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String s=""+R.string.app_id; Session session = new Session.Builder(getBaseContext()).setApplicationId(s).build(); Session.setActiveSession(session); if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback)); } } private class SessionStatusCallback implements Session.StatusCallback { @Override public void call(Session session, SessionState state, Exception exception) { // TODO Auto-generated method stub if(session.isOpened()){ //Do your task } } } 

我决定在GitHub上分发facebook-android-sdk项目,并进行必要的更改。 如果有人有兴趣,我已经提交了我的更改拉请求, https://github.com/facebook/facebook-android-sdk/pull/294

是的,你可以通过编程来设置它。 使用会话$生成器类,它允许您build立一个会议,而不需要使用一个私人的构造函数。

 Session session = new Session.Builder(context).setApplicationId(applicationId).build(); 

我认为有一个简单的方法来做到这一点,只是调用静态方法setApplicationId com.facebook.Settings.setApplicationId(facebookID);

你很好走。 无需使用Builder手动创build会话并将其设置为活动会话!

缺陷的细节:

您在设置类中设置的facebookID将由com.facebook.internal.UtilitygetMetadataApplicationId方法com.facebook.internal.Utility

 public static String getMetadataApplicationId(Context context) { Validate.notNull(context, "context"); Settings.loadDefaultsFromMetadata(context); return Settings.getApplicationId(); } 

而所有的调用又将被用于创build会话:

 Session(Context context, String applicationId, TokenCachingStrategy tokenCachingStrategy, boolean loadTokenFromCache) { // if the application ID passed in is null, try to get it from the // meta-data in the manifest. if ((context != null) && (applicationId == null)) { applicationId = Utility.getMetadataApplicationId(context); } Validate.notNull(applicationId, "applicationId"); . . . } 

干杯。

你不能简单地分叉SDK和自己添加这些变化?