2016-01-03 112 views
1

我需要訪問非公開Goog​​le日曆,而不需要用戶登錄甚至沒有Google帳戶。使用服務帳戶在iOS中訪問Google日曆

我創建了一個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(); 

這包括:

  1. 建立在谷歌應用程序控制臺
  2. 項目創建服務帳戶
  3. 授予服務帳戶訪問Google日曆的權利

它工作的很棒!

我需要在IOS中做同樣的事情。我已經閱讀了關於這個主題的每一個問題/答案,並且發現了很多不同的答案。許多人表示Google不允許在IOS SDK中使用這個功能,因爲服務帳戶旨在供基於服務器的應用程序使用。我不同意,因爲我需要的功能在Android中可用。那麼現在怎麼辦?

用例如下: 我的IOS應用需要訪問Google日曆。如果您可以使用OAuth,那麼這一部分不會太難。我使用這種方法的問題是:

  • 需要用戶擁有一個Google帳戶。我的許多用戶都是Apple-Only。我無法要求他們獲取Google帳戶只是爲了使用我的應用。
  • 我無法公開日曆。所以,我需要爲每個新用戶提供訪問權限。我想我可以使用基於Web的應用程序來做到這一點,但這不能解決問題(請參閱上一個問題 - 沒有Google帳戶)。

我真的需要能夠在非公開Goog​​le日曆中查詢事件,而無需用戶使用Google帳戶。解決方案是使用「服務帳戶」(我認爲)。

我看了一個提問/回答認爲這是可能的,但解決方案從來沒有公佈。 (How to list Google Calendar Events without User Authentication

HELP !!!!

回答

1

官方文檔表明,如果您想處理Calendar API(例如),則必須擁有Google Apps for Work(source)。

如果您擁有Google Apps域(例如,如果您使用Google Apps for Work),Google Apps域的管理員可以授權應用程序代表Google Apps域中的用戶訪問用戶數據。例如,使用Google Calendar API將事件添加到Google Apps域中所有用戶的日曆的應用程序將使用服務帳戶代表用戶訪問Google Calendar API。

一旦滿足前提條件,您可以嘗試根據您的實現調用Calendar API的REST URL(因爲似乎沒有iOS支持或文檔中提供的示例)。

+0

實際上,我在Google Apps for Work中使用Google Apps域。所以,我認爲先決條件已經得到滿足。你可以給我一些示例代碼來展示如何使用REST URL。我已經嘗試使用帶有以下GET的高級REST客戶端(Chrome插件)。我嘗試了以下嘗試失敗的最大次數:GET https://www.googleapis.com/calendar/v3/calendars/heathwallace.com_gpupieshkuc85dd832m9gjrh9g%40group.calendar.google.com/events?key={YOUR_API_KEY}。我迷路了。我需要一個代碼示例或上面討論的工具的屏幕截圖。 – JustLearningAgain

+0

您可以在REST中查看示例API調用的服務帳戶頁面。高級REST客戶端可能有點棘手,因爲REST調用需要授權。希望這將有助於你的需要。 – adjuremods

+0

你有任何示例代碼顯示如何使這項工作?我看過你引用的頁面(閱讀你的文章之前和之後)。問題是這似乎很複雜。這裏的代碼適用於Google雲端硬盤,而不是日曆,儘管我知道它們非常相似。我真的很喜歡顯示所有步驟的簡單方法。即使你的回答方向不同,如果我能確保我(和其他所有人都有這個問題)有一個簡單的源代碼示例,可以將它標記爲答案。謝謝!!! – JustLearningAgain

相關問題