使用SyncAdapter与* local * gmail和facebook app数据同步

时间:2012-07-17 23:25:36

标签: android facebook gmail android-syncadapter

对于我需要开发的应用,我需要能够使用SyncAdapter同步gmail和facebook数据。我希望与本地的facebook和gmail应用程序(如果可用)同步,而不是远程服务器。与本地应用程序同步意味着更少的电池使用量,更少的网络使用率,更快的同步等。当然,如果需要,我将设置正确的权限。

我的问题

  • 如果有任何应用程序(gmail / facebook)可用,是否可以查询数据(消息,事件等)?
  • 如果没有,是否有可能从他们那里获得一个身份验证令牌(或任何类型的凭证),这将允许我查询服务器而无需用户再次输入每个用户名和密码?
  • 如果可能的话,也可以在任一facebook或gmail应用程序同步后立即自动同步,以便我们尽快获得新数据?

如果这些都不可用,我想我自己需要获取数据,因此与此问题无关。

2 个答案:

答案 0 :(得分:3)

我不能代表Facebook,但GMail应用程序不允许这样做。它曾经以前工作,但他们已经保护它,以便只有谷歌应用程序可以查询电子邮件内容提供商。您可以做的最好的事情是使用labels API获取邮件数量。您可以使用标准Android AccountManager获取Google服务的身份验证令牌(ClientLogin或OAuth2)。然后,您必须使用它连接到特定API以获取实际数据。

答案 1 :(得分:2)

啊,现在我更了解你的问题了。我认为没有办法直接从应用程序的本地副本获取您感兴趣的数据。这是一个有趣的想法,并且对于您建议的速度/空间/带宽原因是合理的,但需要来自当前不可用的应用程序的大量支持。

尽管应用确实支持共享本地数据,但试图避免用户重新输入密码也几乎肯定仍然是不可能的。毕竟,GMail应用程序如何验证您的应用程序是否应该有权读取其所有数据?大概是通过提示您的GMail用户名和密码。仅仅使用相同的设备绝对不意味着完全信任。

使用SyncAdapter并存储示例项目中演示的身份验证令牌,您应该能够限制用户输入一次凭据,但这是您能够做到的最佳状态。


<强>此前:

您是否看过SDK附带的SampleSyncAdapter?

These instructions快速概述了如何访问样本。

如果您正在使用Eclipse,那么它们实际上就更容易建议。获取示例项目:

  1. 选择File&gt; New&gt; Other...
  2. 选择Android&gt; Android Sample Project
  3. 选择适用于您的项目的目标/ API级别(可能是最新的)
  4. 选择您感兴趣的示例项目,本例中为SampleSyncAdapter
  5. 示例项目是如何使用SyncAdapters的一个很好的例子,应该很容易适应与GMail,Facebook等的连接。