Как обращаться с несколькими социальными медиа-входами и сеансами Поток на 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 в легко поддерживаемых решениях, облегчающих сеансы манипуляции?
Будет ли я лучше иметь отдельные действия на основе того, какой логин был использован?
Ответы
Ответ 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 для логинов
- Создание интерфейса для общих методов