使用服务帐户在IOS中访问Google日历

使用服务帐户在IOS中访问Google日历,ios,calendar,google-calendar-api,icalendar,Ios,Calendar,Google Calendar Api,Icalendar,我需要访问一个非公开的谷歌日历,而不需要用户登录,甚至不需要谷歌帐户 我创建了一个Android应用程序,可以使用服务帐户访问谷歌日历: GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setSe

我需要访问一个非公开的谷歌日历,而不需要用户登录,甚至不需要谷歌帐户

我创建了一个Android应用程序,可以使用服务帐户访问谷歌日历:

        GoogleCredential credential = new GoogleCredential.Builder()
                .setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId(serviceAccountID)
                .setServiceAccountScopes(scopes)
                .setServiceAccountPrivateKeyFromP12File(licenseFile)
                .build();
        com.google.api.services.calendar.Calendar.Builder builder = new com.google.api.services.calendar.Calendar.Builder(httpTransport, jsonFactory, credential);
        builder.setApplicationName(appName);
        com.google.api.services.calendar.Calendar client = builder.build();

        com.google.api.services.calendar.Calendar.Events.List list = client.events().list(calendarID);
        list.setMaxAttendees(maxAttendees);
        list.setTimeZone(timeZone);
        list.setTimeMin(startTime);
        list.setTimeMax(endTime);
        list.setOrderBy(orderBy);
        list.setShowDeleted(showDeleted);
        list.setSingleEvents(true);
        Events events = list.execute();
这包括:

  • 在Google应用程序控制台中创建项目
  • 创建服务帐户
  • 授予服务帐户对Google日历的访问权限
  • 它工作得很好

    我需要在IOS中做同样的事情。我已经阅读了关于这个话题的所有问题/答案,并找到了非常不同的答案。许多人说,谷歌在IOS SDK中不允许这样做,因为服务帐户旨在供基于服务器的应用程序使用。我不同意,因为我需要的功能在Android中可用。那么,现在怎么办

    用例如下所示: 我的IOS应用程序需要访问谷歌日历。如果您可以使用OAuth,那么这一部分并不太难。我对这种方法的问题是:

    • 要求用户拥有Google帐户。我的许多用户只是苹果公司的。我不能仅仅为了使用我的应用程序就要求他们获得谷歌账户
    • 我不能把日历公之于众。所以,我需要给每个新用户提供访问权限。我想我可以用一个基于网络的应用程序做到这一点,但这并不能解决这个问题(请参阅前面的问题-没有谷歌帐户)
    我真的需要能够查询非公开谷歌日历中的事件,而用户不需要谷歌帐户。解决方案是使用“服务帐户”(我认为)

    我读到一个问题/答案说这是可能的,但解决方案从未公布。()


    救命啊

    官方文档建议,如果你想处理日历API(例如),你必须拥有Google Apps for Work()

    例如,如果您有一个Google Apps域如果您使用Google Apps进行工作,Google Apps域的管理员可以授权应用程序代表Google Apps域中的用户访问用户数据。例如,使用谷歌日历API向谷歌应用程序域中所有用户的日历添加事件的应用程序将使用服务帐户代表用户访问谷歌日历API


    满足先决条件后,您可以尝试根据您的实现调用日历API的其余URL(因为文档中似乎没有iOS支持或示例)。

    事实上,我正在使用Google Apps域和Google Apps进行工作。因此,我认为先决条件已经满足。你能给我一些示例代码说明如何使用REST URL吗。我已经尝试过使用高级REST客户端(Chrome插件)和下面的GET。我尝试了以下操作,但失败的尝试次数最多:获取{YOUR_API_KEY}。我迷路了。我需要一个上面提到的工具的代码示例或屏幕截图。您可以在REST中查看服务帐户页面以获取示例API调用。高级REST客户端可能有点棘手,因为REST调用需要授权。希望这将有助于满足您的需求。您是否有任何示例代码显示如何使其工作?我已经看过了你引用的页面(在阅读你的文章之前和之后)。问题是这似乎很复杂。这里的代码是针对谷歌硬盘的,而不是日历,尽管我知道它们非常相似。我真的想要一个简单的方法来显示所有的步骤。即使您的答案有不同的方向,但如果我能确保我(以及所有其他有此问题的人)有一个简单的源代码示例来引导他们完成这些步骤,我会将此标记为答案。谢谢