我需要訪問非公開Google日曆,而不需要用戶登錄甚至沒有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();
這包括:
- 建立在谷歌應用程序控制臺
- 項目創建服務帳戶
- 授予服務帳戶訪問Google日曆的權利
它工作的很棒!
我需要在IOS中做同樣的事情。我已經閱讀了關於這個主題的每一個問題/答案,並且發現了很多不同的答案。許多人表示Google不允許在IOS SDK中使用這個功能,因爲服務帳戶旨在供基於服務器的應用程序使用。我不同意,因爲我需要的功能在Android中可用。那麼現在怎麼辦?
用例如下: 我的IOS應用需要訪問Google日曆。如果您可以使用OAuth,那麼這一部分不會太難。我使用這種方法的問題是:
- 需要用戶擁有一個Google帳戶。我的許多用戶都是Apple-Only。我無法要求他們獲取Google帳戶只是爲了使用我的應用。
- 我無法公開日曆。所以,我需要爲每個新用戶提供訪問權限。我想我可以使用基於Web的應用程序來做到這一點,但這不能解決問題(請參閱上一個問題 - 沒有Google帳戶)。
我真的需要能夠在非公開Google日曆中查詢事件,而無需用戶使用Google帳戶。解決方案是使用「服務帳戶」(我認爲)。
我看了一個提問/回答認爲這是可能的,但解決方案從來沒有公佈。 (How to list Google Calendar Events without User Authentication)
HELP !!!!
實際上,我在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
您可以在REST中查看示例API調用的服務帳戶頁面。高級REST客戶端可能有點棘手,因爲REST調用需要授權。希望這將有助於你的需要。 – adjuremods
你有任何示例代碼顯示如何使這項工作?我看過你引用的頁面(閱讀你的文章之前和之後)。問題是這似乎很複雜。這裏的代碼適用於Google雲端硬盤,而不是日曆,儘管我知道它們非常相似。我真的很喜歡顯示所有步驟的簡單方法。即使你的回答方向不同,如果我能確保我(和其他所有人都有這個問題)有一個簡單的源代碼示例,可以將它標記爲答案。謝謝!!! – JustLearningAgain