Facebook SDK для Android - установите идентификатор приложения программно
У меня есть нативное приложение для Android, которое необходимо подключить к другому приложению Facebook (с другим идентификатором приложения) на основе параметров приложения, которые можно изменить во время выполнения.
Представьте, что приложение может быть настроено так, чтобы указывать на DEV, TEST или PROD. При указании на DEV идентификатор приложения FB должен быть равен "1". При указании на ТЕСТ идентификатор приложения FB должен быть равен "2". и т.п.
Проблема в том, что UiLifecycleHelper из SDK Facebook автоматически считывает "com.facebook.sdk.ApplicationId" из AndroidManifest.xml во время фазы onCreate. Кажется, нет способа установить это программно.
Можно ли использовать UiLifecycleHelper и указывать на другой идентификатор приложения во время выполнения, или я должен вернуться к ручному управлению сеансом?
6 ответов
Я решил раскошелиться на GitHub проект facebook-android-sdk и внести необходимые изменения. Я отправил запрос на изменение своих изменений, если кому-то это интересно, https://github.com/facebook/facebook-android-sdk/pull/294.
Привет всем, что я знаю выше, ответ правильный для older sdk version
, но в facebook sdk 4
здесь нет Session
учебный класс
Вы можете просто сделать это, используя этот однострочный код:
FacebookSdk.setApplicationId(APP_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
}
}
}
Да, вы можете установить его программно. Используйте класс Sessions$Builder, который позволяет вам строить сеанс без использования одного из частных конструкторов.
Session session = new Session.Builder(context).setApplicationId(applicationId).build();
Я думаю, что есть более простой способ сделать это, просто вызовите статический метод setApplicationId com.facebook.Settings.setApplicationId(facebookID);
И ты в порядке. Нет необходимости создавать сеанс вручную с помощью Builder и устанавливать его в качестве активного сеанса!
Детали Недостатка:
FacebookID, который вы установили в классе настроек, будет использоваться getMetadataApplicationId
метод com.facebook.internal.Utility
public static String getMetadataApplicationId(Context context) {
Validate.notNull(context, "context");
Settings.loadDefaultsFromMetadata(context);
return Settings.getApplicationId();
}
Который, в свою очередь, будет использоваться всеми вызовами для создания сеанса:
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 и добавить эти изменения самостоятельно?