带有服务器端组件的Android应用程序是否应该直接访问Facebook?

带有服务器端组件的Android应用程序是否应该直接访问Facebook?,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android Sdk,如果我正在构建一个使用Facebook SDK的Android应用程序,并且还有一个具有大部分相同功能的web应用程序,那么Android应用程序应该如何处理社交行为?它应该通过SDK直接向Facebook API发出请求,还是应该通过我自己的API向web应用服务器发送请求,并允许web应用代表Android应用向Facebook发出请求?大多数Facebook for Android示例都使用前一种方法,但是没有明确讨论当有一个web后端将具有与Android应用程序相同的社交功能时的最佳实

如果我正在构建一个使用Facebook SDK的Android应用程序,并且还有一个具有大部分相同功能的web应用程序,那么Android应用程序应该如何处理社交行为?它应该通过SDK直接向Facebook API发出请求,还是应该通过我自己的API向web应用服务器发送请求,并允许web应用代表Android应用向Facebook发出请求?大多数Facebook for Android示例都使用前一种方法,但是没有明确讨论当有一个web后端将具有与Android应用程序相同的社交功能时的最佳实践。

我以前一直在考虑类似的问题。这是一个PHP应用程序,但本质上设计选择是将FB交互放在前端(JS-SDK)或后端并代理它(PHP-SDK)。遗憾的是,我也没有找到太多的指导,所以我不得不自己下定决心

由于通常看起来没有答案,这取决于你对FB做了什么,以及它集成到你的应用程序/网络应用程序/后端所做的事情中的深度。你的Android在其他方面更像是一个客户端应用程序,还是依赖于web应用程序通过web服务提供的其他功能?它是否以某种方式与发送到后端的用户操作集成,或者它只是提供了一些额外的噱头(例如“Like”按钮,行中的任何东西)您是否使用SDK来验证并从FB(电子邮件、名称)中提取与用户相关的数据,这些信息是否在您的后端发挥作用

在我看来,它可以归结为以下几点:

与FB的直接通信实现起来要简单得多,因为你的应用程序和FB之间没有额外的层,即代理代码等。因此,如果FB只是松耦合的,那么它很可能是“足够好”的选项

从前端到后端修补FB可能会很麻烦-特别是如果你想通过FB进行身份验证,一开始会有点复杂。然而,您将在一个地方拥有所有FB逻辑,由Android应用程序和Webapp共享,因此以后维护起来显然更容易,并且可以更好地与后端可能提供的其他交互进行集成


希望这能带来一些价值,也希望看到其他的观点。

我认为这两种方法都是正确的,但选择主要取决于你在服务器端已有的功能,以及你是否计划从不同的应用程序(如安卓、iOS、Windows Phone应用程序)中使用相同的功能。在这种情况下,只需在前端获取具有所需权限的用户令牌,并让web服务器使用该令牌与facebook对话,这是有意义的。您甚至可以为用户保存此令牌,这样,如果您进行了web注册和应用程序注册,用户就不必再次授予权限。在我们的应用程序中,我们使用这种方法,因为基本上有五个前端(Android、iOS、桌面、移动Web、完整Web),这样应用程序开发人员就可以在那里的平台上使用sdk获取令牌(由于facebook的安全规则,您必须使用令牌,而不是用户名、密码)。另一方面,如果所有的Facebook通信都只在你的应用程序中使用,服务器不需要知道太多,那么在应用程序中加入api调用。

在我看来,最好使用每个给定平台的可用SDK/api,而不是尝试编写自己的集中化和使用单个库。由于您对Android应用程序应如何处理社交互动特别感兴趣,因此我建议使用适用于Android的Facebook SDK


随着平台列表的增加,它确实增加了您必须维护的代码的大小和您必须学习的SDK/API,但这种方法最重要的因素是用户体验。通过坚持使用本机库,并随着这些库的发展而发展应用程序,您将为用户提供他们最可能习惯的体验。他们不必学习如何使用你的应用程序,但可以使用他们习惯使用的控件发布帖子、更新状态和查看好友列表。此外,您将能够利用特定的平台功能(在移动情况下,例如将您的应用发布到用户订阅源,以推广您的应用:)

通过您的web应用发送用户数据不会违反Facebook的政策:“您不得包含代理、请求或收集Facebook用户名或密码的功能。“如果是这样的话,那么所有其他的考虑都将是毫无意义的。不,我想我还不够清楚。我的意思是代理一些事情,比如通过向用户发出请求并使用输出而不是使用本机Android库来获取用户的好友列表。根据Facebook的例子,这种代理方法似乎是被允许的。你不允许询问或保存密码。代理意味着获取用户密码并将其发送给FB。您必须使用FB auth对话并获得一个令牌,该令牌允许您代表用户发出请求,并且您甚至可以存储该令牌以供以后使用(但它将在一段时间后过期)