如何在Android上处理多个社交媒体登录和会话流?

时间:2015-04-01 13:21:43

标签: android facebook android-fragments

我创建了一个具有碎片导航抽屉的Android应用程序。

然后我开始使用社交媒体集成,即Facebook,Twitter和Google Plus。我正在使用相应的官方SDK。

非社交媒体会话和获取数据的调用在以下活动中进行:

  • Mainactivity:如果任何会话丢失或被撤销,则需要重定向到LoginActivity。这是在活动生命周期方法期间完成的。

  • LoginActivity:授予权限的位置,并在成功后重定向到Main

  • NavigationDrawerFragment:导航抽屉,我用它来显示用户的个人资料图片,姓名和电子邮件地址。

在这3个类中,我调用相应的SDK方法并管理会话,因此存在大量代码重复。

此外,3 SDK还提供了明显不同的身份验证方式。

  • Facebook:使用在活动的所有标准生命周期功能上实施的UiLifeCycleHelper
  • Google Plus:您必须在活动中实施GooglePlay商店回调,并在所有活动中创建GoogleApiClient
  • Twitter:没有“接管你的应用程序”的态度,并且使用与Android上通常的REST API调用相同的方式进行改造:使用Retrofit。但是,您必须为每次登录提供权限。

因此,所有这些用于处理不同社交媒体登录的功能都包含在所有必需的活动中,使得应用程序代码非常庞大且难以管理。

对于如何将这些auth方法抽象为易于维护的解决方案,使得管理会话变得更容易,您有什么建议吗? 我最好根据使用的登录信息进行单独的活动吗?

4 个答案:

答案 0 :(得分:2)

我也面临这种问题。让我告诉我我做了什么。

  1. 尝试从用户设备中找到facebook,google和Twitter应用。
  2. 如果您发现然后登录,请使用该应用程序进行发布。它太容易管理了。无需存储会话和所有。只需转到应用程序并从应用程序中获取或发布所需数据。
  3. 如果您没有从设备中找到应用程序,则必须使用libr进行Dialog登录。它们还能够存储社交媒体数据的会话。像facebook和twitter lib有自己的功能来存储和终止该会话。

答案 1 :(得分:2)

我已经完成了几次,我建议你采用的最佳方法是:

  • 提取要添加的集成的哪个部分。它只是共享,你想让用户启动一个会话,你需要任何类型的API密钥。
  • 完成第一步后,您可以提取一些所有社交平台共有的抽象层方法(几乎总是有一个共同的功能)。
  • FacebookFactoryTwitterFactory等能够为给定任务生成准备好的对象的平台生成工厂。想象一下,您想要登录,然后向具体工厂询问LoginTask并公开requestOAuthTokengetSession等常见操作。如果由于其他原因有些事情无法提取,知道它不会破坏你的应用程序,你总是可以垂头丧气。
  • 你可以通过使用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 :(得分:0)

我和你在同一条船上,

到目前为止,我发现ASNE可以使用,但我还在玩它。

答案 3 :(得分:0)

这是Factory Pattern踢出的确切问题

你需要待办事项

  1. 为登录创建抽象工厂
  2. 为常用方法创建界面