Dans une application React JS, je souhaite créer un événement Google Calendar. Je suis complètement nouveau sur l'API Google et j'essaie d'apprendre/comprendre comment procéder.
Vous trouverez ci-dessous un composant de test de réaction qui affiche un écran vide avec un bouton « Google Sign In » et un bouton « Ajouter au calendrier ».
J'ai créé une constante TEST_EVENT pour cet exemple.
Les utilisateurs doivent d'abord se connecter, puis cliquer sur le bouton "Ajouter au calendrier". J'ai obtenu le jeton d'accès. La prochaine étape consiste à créer l'événement. Ma question est la suivante : si j'ai un access_token, comment puis-je créer un événement de calendrier à l'aide de l'API fetch ?
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
Grâce à 3 vidéos que j'ai regardées sur youtube réalisées par Coopercodes, j'ai un exemple fonctionnel ci-dessous. Cet exemple utilise un flux implicite pour créer un événement sur Google Agenda. Il m'a fallu quelques jours pour le faire fonctionner. J'espère que cela aidera les autres :