2013-03-01 1 views
5

Provare example da g + documentazione con Authorize requests using OAuth 2.0: ON. Ottenuto Unauthorized come risultato. Ecco l'output:Google+ impossibile inserire il momento

Request 

POST https://www.googleapis.com/plus/v1/people/me/moments/vault?debug=true&key={YOUR_API_KEY} 

Content-Type: application/json 
Authorization: Bearer *my_token* 
X-JavaScript-User-Agent: Google APIs Explorer 

{ 
"target": { 
    "url": "https://developers.google.com/+/web/snippet/examples/thing" 
}, 
"type": "http://schemas.google.com/AddActivity" 
} 

Response 


401 Unauthorized 

cache-control: private, max-age=0 
content-encoding: gzip 
content-length: 93 
content-type: application/json; charset=UTF-8 
date: Fri, 01 Mar 2013 18:56:34 GMT 
expires: Fri, 01 Mar 2013 18:56:34 GMT 
server: GSE 
www-authenticate: AuthSub realm="https://www.google.com/accounts/AuthSubRequest" allowed-scopes="https://www.googleapis.com/auth/plus.login,https://www.google.com/accounts/OAuthLogin" 

{ 
"error": { 
    "errors": [ 
    { 
    "message": "Unauthorized" 
    } 
    ], 
    "code": 401, 
    "message": "Unauthorized" 
} 
} 

Provato a revocare le autorizzazioni di google api explorer e autenticato di nuovo. Niente è cambiato. Sto facendo qualcosa di sbagliato o g + apis non sono ancora pronti per l'uso in produzione?

risposta

3

Mi sembra che l'API explorer al momento non funzioni con lo scrivere attività app su Google perché non passa il campo requestvisibleactions al flusso OAUTH2. Puoi ancora fare le cose manualmente come descriverò qui sotto.

ci sono due cose che dovete fare:

In primo luogo, garantire che si sta rendendo il tasto di accesso con requestvisibleactions fissati per i tipi di attività app si sta inserendo. L'esempio seguente mostra come si renda segno-in con l'attività aggiuntivo:

<div id="gConnect"> 
    <button class="g-signin" 
     data-scope="https://www.googleapis.com/auth/plus.login" 
     data-requestvisibleactions="http://schemas.google.com/AddActivity" 
     data-clientId="YOUR_CLIENT_ID" 
     data-callback="onSignInCallback" 
     data-theme="dark" 
     data-cookiepolicy="single_host_origin"> 
    </button> 
</div> 

successivo, è necessario costruire e scrivere l'attività app. L'esempio seguente mostra questo utilizzando JavaScript:

var payload = { 
    "target": { 
     "id" : "replacewithuniqueidforaddtarget", 
     "image" : "http:\/\/www.google.com\/s2\/static\/images\/GoogleyEyes.png", 
     "type" : "http:\/\/schema.org\/CreativeWork", 
     "description" : "The description for the activity", 
     "name":"An example of AddActivity" 
    }, 
    "type":"http:\/\/schemas.google.com\/AddActivity", 
    "startDate": "2012-10-31T23:59:59.999Z" 
    }; 
    var args = { 
    'path': '/plus/v1/people/me/moments/vault', 
    'method': 'POST', 
    'body': JSON.stringify(payload), 
    'callback': function(response) { 
     console.log(response); 
    } 
    }; 

    gapi.client.request(args); 

Potete vedere una demo live qui:

http://wheresgus.com/appactivitiesdemo

È possibile conoscere tutti i tipi di attività dalla documentazione qui:

https://developers.google.com/+/api/moment-types

Aggiornamento

Nota la demo dal vivo è stato aggiornato con il seguente codice e non dovrebbe essere chiamando direttamente gapi.client.request:

writeListenActivity: function(url){ 
    var payload = { 
    "type": "http://schemas.google.com/ListenActivity", 
    } 

    if (url != undefined){ 
    payload.target = { 'url' : url }; 
    }else{ 
    payload.target = { 
     "type": "http:\/\/schema.org\/MusicRecording", 
     "id": "uniqueidformusictarget", 
     "description": "A song about missing one's family members fighting in the American Civil War", 
     "image": "https:\/\/developers.google.com\/+\/plugins\/snippet\/examples\/song.png", 
     "name": "When Johnny Comes Marching Home" 
    }; 
    } 
    this.writeAppActivity(payload); 
}, 
writeAddActivity: function(url){ 
    var payload = { 
    "type":"http:\/\/schemas.google.com\/AddActivity", 
    "startDate": "2012-10-31T23:59:59.999Z" 
    }; 
    if (url != undefined){ 
    payload.target = { 
     'url' : 'https://developers.google.com/+/plugins/snippet/examples/thing' 
    }; 
    }else{ 
    payload.target = { 
     "id" : "replacewithuniqueidforaddtarget", 
     "image" : "http:\/\/www.google.com\/s2\/static\/images\/GoogleyEyes.png", 
     "type" : "http:\/\/schema.org\/CreativeWork", 
     "description" : "The description for the activity", 
     "name":"An example of AddActivity" 
    }; 
    } 
    this.writeAppActivity(payload); 
}, 
writeAppActivity: function(payload){ 

    gapi.client.plus.moments.insert(
     { 'userId' : 'me', 
     'collection' : 'vault', 
     'resource' : payload 
     }).execute(function(result){ 
      console.log(result); 
     }); 
} 

Di particolare rilievo è il codice gapi.client.plus.moments.insert che sostituisce la chiamata gapi.client.request.

+2

Grande, sembra che 'requestvisibleactions' sia la radice del problema. E [questo post] (https://plus.google.com/118276561380249048216/posts/2kMX9Dzaf8V) conduce a [diff] corretto (https://code.google.com/p/google-api-php-client/source /diff?spec=svn533&r=533&format=side&path=/trunk/src/auth/Google_OAuth2.php) per l'autenticazione oauth lato server. Grazie per le informazioni! – mente

+0

@class Cosa intendi con "replacewithuniqueidforaddtarget" devi semplicemente digitare un ID casuale qui o qualcosa del genere? – Supertecnoboff

+0

Per l'ID di destinazione, è solo una stringa casuale come suggerito. – class