Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与Google日历/Outlook进行双向同步_Java_C#_Outlook_Calendar_Fullcalendar - Fatal编程技术网

Java 与Google日历/Outlook进行双向同步

Java 与Google日历/Outlook进行双向同步,java,c#,outlook,calendar,fullcalendar,Java,C#,Outlook,Calendar,Fullcalendar,我在我的应用程序中使用来显示通过我们自己的应用程序创建的事件 我有一个用于创建/更新事件的添加/编辑表单。这些事件存储在应用程序使用的数据库中 我需要更进一步,需要将Google和Outlook日历同步到我的日历中。这应该是双向同步,即 如果我在日历中创建/编辑/更新事件,则应在Google/Outlook日历中创建/编辑/删除该事件 反之亦然 如果我在Google/Outlook日历中做一些更改,它应该在我的日历中可见 我想听听你对实施这项计划的想法: 我是否应该获取Google/Outloo

我在我的应用程序中使用来显示通过我们自己的应用程序创建的事件

我有一个用于创建/更新事件的添加/编辑表单。这些事件存储在应用程序使用的数据库中

我需要更进一步,需要将Google和Outlook日历同步到我的日历中。这应该是双向同步,即

如果我在日历中创建/编辑/更新事件,则应在Google/Outlook日历中创建/编辑/删除该事件

反之亦然

如果我在Google/Outlook日历中做一些更改,它应该在我的日历中可见

我想听听你对实施这项计划的想法:

  • 我是否应该获取Google/Outlook的所有事件并将它们导入我的数据库,然后在我的日历视图中显示它们。这在技术上可能吗?i、 e将通道的整个事件集导入my db

  • 我是否应该通过Google/Outlook API获取当前日历中某个特定视图的事件(我将拥有日历视图的开始数据和结束日期),并将其显示到日历中(即我没有将这些外部事件存储在数据库中)。如果用户希望对事件进行任何更改,则应通过其创建/更新和删除API调用直接更新到Google/Outlook日历

  • 最好的方法应该是什么

    编辑:

    我转到(日历同步web应用程序之一)并注意到

    i、 e他们允许许多不同的应用程序将日历/任务同步到他们的日历中

    看到这些,我觉得将所有这些应用程序的所有事件存储到我们自己的应用程序的数据库中是不可行的。如果通过我的应用程序对这些事件进行了任何更改,我应该调用这些应用程序的API,将这些更改添加到它们的应用程序(谷歌日历、Outlook等)中


    你的想法是什么

    要创建可靠的同步解决方案,您需要做几件事。最重要的是,另一方(本例中为谷歌日历和outlook)应与您合作,并提供一个api来执行增量同步。我没有看Outlook,但Google日历api提供了您所需要的一切

    首先回答您的问题-是的,您需要获取所有事件(您可以跳过过去的事件)并将它们存储在您自己的数据库中。总是对所有外部源(加上您自己的数据库)进行查询速度很慢,使同步变得更加困难,并对您造成很大限制,因为您无法轻松地筛选或搜索多个源上的事件。下面我假设我们只使用谷歌日历,希望Outlook是类似的(但我没有检查)

    所以,你需要什么的清单:

  • 您自己的带有事件的数据库,其中事件表有几个重要的元数据列:Created\Update(事件上次创建或更新的时间,与事件本身的日期无关)、Source(此事件的来源,如Google日历、Outlook或您自己的应用程序)、UpdateDataSource(此事件上次修改的来源),EventID(事件的唯一标识符-在某些情况下使用该标识符以防止重复非常重要)

  • 最初从目标提供程序获取所有事件并将它们存储在数据库中。是对Google日历事件结构的引用,您可以看到所有必需的元数据字段(创建、更新、id)都存在于此

  • 现在,您需要关注来自提供者的新事件。您可以通过轮询(定期检查是否有新事件)或向您提供提供程序推送事件来完成此操作。谷歌日历支持这两个选项。是一个描述如何实现推送通知的链接,是一个描述如何仅获取新事件(即您(您的应用程序)以前未看到的事件)的链接。请注意,您不需要每次都获取整个列表,也不需要提供一些筛选选项(如“提供2016-06-21之后创建的所有事件”)。所有这些都是不可靠的,但谷歌日历开发人员知道如何制作好同步api,所以他们会帮你解决这个问题。只需抓取并存储提供的
    nextSyncToken
    ,然后使用它来提出未来的请求。如果使用推送通知-总是也会定期轮询事件,但不经常(比如每隔几个小时一次)。推送通知不是100%可靠,有些可能会丢失-您需要使用
    nextSyncToken
    api处理这些通知

  • 将您自己的应用程序所做的更改推送到目标提供商。但是,不要在做出改变时立即这样做。取而代之的是使用后台进程,它一个接一个地为每个用户+提供者对推送更改。会有网络故障,会有冲突,所以您必须按顺序推送更改,而不是并行推送(同样,对于每个用户+提供者对,按顺序推送,而不是全局推送)。存储最后一次成功推送更改的时间戳(同样,对于每个用户+提供者),如果进程被中断,您知道从何处重新开始
  • 这里我不会详细介绍,但您会发现冲突——即当用户在多个源中修改同一事件时。但是,如果使用推送通知,冲突将非常罕见。不过,您必须至少在用户界面中为它们进行规划。如果检测到无法解决的冲突,请暂停同步过程并询问用户如何解决
    因此,您可以看到还有一些工作要做,但最终您将向提供商发出少量请求,并在每次请求中获取少量数据,您的用户将很高兴立即在您的应用程序中看到他们的Google Calendar\Outlook中的新事件(反之亦然)。

    精彩的解释。我还有一个问题。在将外部事件存储到应用程序中时,我应该为外部事件表示的所有字段创建列,还是只创建几个重要字段?