gpt4 book ai didi

android - 如何在 Android 上处理多个社交媒体登录和 session 流?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:47 28 4
gpt4 key购买 nike

我创建了一个带有带 fragment 的抽屉导航的 Android 应用。

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

非社交媒体 session 和获取数据的调用是在以下 Activity 中进行的:

  • Mainactivity :如果任何 session 丢失或撤销,它需要重定向到 LoginActivity。这是在 Activity 生命周期方法期间完成的。

  • LoginActivity : 授权成功后跳转到Main

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

在这 3 个类中,我调用各自的 SDK 方法并管理 session ,因此存在大量代码重复。

此外,这 3 个 SDK 提供身份验证的方式也大不相同。

  • Facebook:使用 UiLifeCycleHelper在 Activity 的所有标准生命周期功能上实现。
  • Google Plus:您必须在 Activity 中实现 GooglePlay 存储回调,并为所有 Activity 创建一个 GoogleApiClient
  • Twitter:较少有“接管您的应用程序”的态度,并以与 Android 上通常的 REST API 调用相同的方式使用改造:使用 Retrofit .但是,您必须为每次登录授予权限。

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

关于如何将这些身份验证方法抽象为易于维护的解决方案,从而使管理 session 更容易,您有什么建议吗?根据使用的登录名进行单独的 Activity 会更好吗?

最佳答案

我已经做过好几次了,我可以推荐给你的最好方法是:

  • 提取您要添加的集成部分。它只是共享,是否要让用户启​​动 session ,是否需要任何类型的 API key 。
  • 完成第一步后,您可以提取一些对所有社交平台通用的抽象层方法(几乎总是有一个通用功能)。
  • 为每个平台生成一个工厂,例如 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);

当然,您可以使用某种第三方库,但这是我在无法满足我的需求时使用的方法。

关于android - 如何在 Android 上处理多个社交媒体登录和 session 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29391976/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com