Gli utenti autorizzano nella mia applicazione Android. E sto inviando token degli utenti e altre informazioni al mio server. In questo server voglio implementare una logica per gli utenti.Come posso raggiungere le informazioni del calendario degli utenti sul server?
Voglio avere esattamente this flow.
Ho seguito i passaggi quickstart.php in this link per ottenere i calendari degli utenti sul server.
ma ottengo l'errore seguente:
google oauth exception' with message 'could not json decode the token'
Per questo motivo ho provato this solution. Ma prendo lo stesso errore. Quindi come terza opzione ho creato il formato JSON come nello this solution come di seguito.
$access_token = '{
"access_token":'.$access_token.',
"token_type":"Bearer",
"expires_in":3600,
"id_token":'.$id_token.',
"refresh_token":" ",
"created":'. time() .'
}';
come si vede, non so come scambiare token di aggiornamento. Ho cercato come ottenere un token di aggiornamento e ho visto this question. E ha implementato this solution nel mio codice ma non è cambiato nulla.
Modifica 4: Ho cercato di ottenere il token di accesso according to this answer nell'applicazione Android e inviarlo al server delle applicazioni. Sto prendendo il codice come prima di me:
GoogleSignInAccount acct = result.getSignInAccount();
code = acct.getServerAuthCode();//sending this code to AsyncTask to get access token
mia funzione per ottenere token di accesso:
private void getAccessToken()throws GoogleAuthException, IOException{
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
List<String> scopes = new LinkedList<String>();
scopes.add("https://www.googleapis.com/auth/calendar");
scopes.add("https://www.googleapis.com/auth/calendar.readonly");
scopes.add("https://www.googleapis.com/auth/urlshortener");
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
try{
GoogleTokenResponse res = flow.newTokenRequest(code).execute();
accessToken = res.getAccessToken();
}catch(IOException e){
}
al lato server PHP ho cambiato user-example.php di file po 'come qui di seguito perché ho il token di accesso ora:
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setAccessType("offline");
$client->setRedirectUri($redirect_uri);
$client->addScope("https://www.googleapis.com/auth/urlshortener");
$service = new Google_Service_Urlshortener($client);
if (isset($_REQUEST['logout'])) {
unset($_SESSION['access_token']);
}
$client->setAccessToken('{"access_token":"'. $access_token .'","token_type":"Bearer","expires_in":3600,"created":'. time() .'}');
if ($client->getAccessToken() && isset($_GET['url'])) {
$url = new Google_Service_Urlshortener_Url();
$url->longUrl = $_GET['url'];
$short = $service->url->insert($url);
$_SESSION['access_token'] = $client->getAccessToken();
Ma ora sto ottenendo sotto l'errore:
Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling POST https://www.googleapis.com/urlshortener/v1/url : (403) Insufficient Permission' in C:\wamp\www\google-php\src\Google\Http\REST.php on line 110
Le variabili tra virgolette singole non vengono valutate. Rompi la stringa aperta per le variabili. '$ sp = 'ciao sono'. $ nome. ' e scrivo stringhe. '; ' –
Ho ancora lo stesso errore di decodifica di JSON. : \ – melomg
Se questi due token non sono numeri interi, inseriscili tra virgolette. –