Подтвердить что ты не робот

Как обращаться с несколькими социальными медиа-входами и сеансами Поток на Android?

Я создал приложение для Android, у которого есть ящик навигации с фрагментами.

Затем я начал с Social Media Integrations, то есть Facebook, Twitter и Google Plus. Я использую официальные соответствующие SDK.

Not Social Media Сессии и вызовы для получения данных производятся в следующих действиях:

  • Mainactivity: Если какая-либо из сеансов потеряна или отменена, ей необходимо перенаправить на LoginActivity. Это делается во время жизненных циклов работы.

  • LoginActivity: Если разрешение предоставлено и перенаправлено на Main после успеха

  • NavigationDrawerFragment: Ящик навигации, я использую это для отображения образа, имени и адреса электронной почты пользователя.

В этих трех классах я вызываю соответствующие методы SDK и управляю сессиями, поэтому существует много дубликатов кода.

Также 3 SDK имеют значительно разные способы обеспечения аутентификации.

  • Facebook: использует UiLifeCycleHelper, который реализован на всех ваших стандартных функциях жизненного цикла активности.
  • Google Plus: вы должны реализовать GooglePlay обратные вызовы хранилища в действии и создать GoogleApiClient для всех действий.
  • Twitter: имеет меньшее отношение "захватить ваше приложение" и использует модификацию в том же порядке, что и обычный вызов REST API на Android: с Retrofit, Однако вы должны предоставить разрешения для каждого входа.

Таким образом, все эти функции для обработки различных учетных записей социальных сетей включены во все необходимые действия, делая код приложения действительно громоздким и трудно управляемым.

Есть ли у вас какие-либо предложения о том, как абстрагировать эти методы auth в легко поддерживаемых решениях, облегчающих сеансы манипуляции? Будет ли я лучше иметь отдельные действия на основе того, какой логин был использован?

4b9b3361

Ответ 1

Я сделал это несколько раз, и лучший подход, который я могу вам порекомендовать, это:

  • Извлеките часть интеграции, которую вы хотите добавить. Это только совместное использование, вы хотите, чтобы пользователь начал сеанс, вам нужны какие-либо ключи API.
  • Сделав первый шаг, вы можете извлечь некоторые методы уровня абстракции, которые являются общими для всех социальных платформ (всегда всегда есть общая функция).
  • Создайте factory для каждой платформы, такой как FacebookFactory или TwitterFactory, которые способны генерировать подготовленные объекты для данной задачи. Представьте, что вы хотите войти в систему, а затем спросите конкретную factory для LoginTask и выведите общие действия, такие как requestOAuthToken, getSession и т.д. Если по другой причине есть что-то, что нельзя абстрагировать, вы всегда можете отказаться зная, что он не нарушит ваше приложение.
  • Вы можете создать более комфортный второй уровень абстракции, используя шаблон Facade, который создается через объект Context (некоторые сети, такие как facebook, являются действительно инвазивными и должны знать много вещей), определяя, что является социальной сетью вы хотите работать с помощью enum.

Вот пример макета, как выглядит ваш код:

SocialFacade facade = SocialFacade.getInstance();
SocialSession session = facade.getSession(Network.Twitter);
String token = session.requestToken(apiId);
facade.getShare(Network.Twitter).sharePost(apiId, message);

В курсе вы можете использовать какую-то стороннюю библиотеку, но это тот подход, который я использую, когда ничто не соответствует моим потребностям.

Ответ 2

Я также сталкиваюсь с такими проблемами. позвольте мне рассказать, что я сделал.

  • попытайтесь найти приложение для facebook, google и Twitter с пользовательского устройства.
  • если вы нашли логин, отправьте сообщение, используя этот сеанс applicationatoin. это будет слишком легко управлять. нет необходимости хранить сеанс и все. просто зайдите в приложение и возьмите или разместите требуемые данные из приложения.
  • если вы не нашли приложение с устройства, чем вам нужно для входа в Dialog с помощью libr. которые также могут хранить сеанс данных социальных сетей. например facebook и twitter lib имеют собственную функцию для хранения и истечения срока действия этого сеанса.

Ответ 3

Я в той же лодке, что и ты,

до сих пор я нашел ASNE для работы, но я все еще играю с ним.

Ответ 4

Thats полная проблема, когда Factory Pattern пинает

Вам нужно сделать

  • Создать абстрактный Factory для логинов
  • Создание интерфейса для общих методов