在 React JS 應用程式中,我想建立一個谷歌日曆事件。我完全不熟悉 google api,我正在嘗試學習/弄清楚如何做到這一點。
以下是一個反應測試元件,它顯示一個帶有「google登入」按鈕和「新增至行事曆」按鈕的空白畫面。
我為此範例建立了一個 TEST_EVENT 常數。
使用者必須先登錄,然後按一下「新增至行事曆」按鈕。我確實獲得了訪問令牌 - 下一步是創建事件。我的問題是,如果我有 access_token,如何使用 fetch API 建立日曆事件?
import React, { useEffect, useState } from 'react' import jwt_decode from "jwt-decode"; const CLIENT_ID = '25262567698-tsaoo718sc35n3k25os074b17jklc5rm.apps.googleusercontent.com'; const SCOPES = 'https://www.googleapis.com/auth/calendar'; const TEST_EVENT = { 'summary': 'Example Event', 'location': 'New York, NY', 'description': 'a description for this', 'start': { 'dateTime': '2023-03-26T10:00:00-04:00', 'timeZone': 'America/New_York', }, 'end': { 'dateTime': '2023-03-26T11:00:00-04:00', 'timeZone': 'America/New_York', }, }; const TestGIS = (props) => { const [user, setUser] = useState({}); const [tokenClient, setTokenClient] = useState({}); function handleCallbackResponse(response) { console.log('encoded JWT ID token:' + response.credential); var userObject = jwt_decode(response.credential); console.log(userObject) setUser(userObject); document.getElementById('signInDiv').hidden = true; } function handleSignOut(event) { setUser({}); document.getElementById('signInDiv').hidden = false; } useEffect(() => { /* global google */ const google = window.google; google.accounts.id.initialize({ client_id: CLIENT_ID, callback: handleCallbackResponse }) google.accounts.id.renderButton( document.getElementById('signInDiv'), { theme: 'outline', size: 'large' } ); // google.accounts.id.prompt(); // this is added to popup the login dialog when page is first loaded - didn't work // Get Access Token // create something called a tokenClient setTokenClient( google.accounts.oauth2.initTokenClient({ client_id: CLIENT_ID, scope: SCOPES, callback: (tokenResponse) => { console.log('tokenResponse=', tokenResponse); // we now have access to a live token to use for ANY google API if (tokenResponse && tokenResponse.access_token) { // create the calendar event here } } }) ); }, []); function createCalendarEvent() { tokenClient.requestAccessToken(); } //----------------------------------------------------------------- return ( <div className='main-cover' style={{ backgroundColor: 'lightblue', width: '100%', height: '100%', zIndex: '10000' }} > <div id="signInDiv"></div> {Object.keys(user).length != 0 && <button onClick={(e) => handleSignOut(e)}>Sign Out</button> } {user && <div> <img src={user['picture']}></img> <h3>{user.name}</h3> <button onClick={() => createCalendarEvent()}>Create calendar event</button> </div> } </div> ) } export default TestGIS
感謝我在 youtube 上觀看的 3 個由 Coopercodes 製作的視頻,我在下面有了一個工作示例。此範例使用隱式串流在 Google 日曆上建立一個事件。我花了幾天時間才讓它發揮作用。我希望這對其他人有幫助: