2012-05-03 3 views
3

J'essaie de créer une application Google Drive pouvant s'exécuter en arrière-plan (par exemple, un cronjob), sans intervention de l'utilisateur , en utilisant Google Drive SDK compte de service, mais il me donne cette erreur et je ne peux pas comprendre pourquoi:Erreur de compte de service Google Drive SDK "L'utilisateur authentifié n'a pas installé l'application avec l'ID client ..."

erreur appelant POST https://www.googleapis.com/upload/drive/v1/files?uploadType=multipart: (403) l'utilisateur authentifié n'a pas installé l'application avec identifiant client {de my_client_id}

Sur la console API Google, j'ai activé Drive API et Drive SDK. Dans l'onglet Drive SDK, j'ai configuré toutes les informations requises. J'ai également publié mon application pour testeurs uniquement sur le Chrome Web Store et l'ai installée dans mon Google Chrome. Le nom de l'application apparaît dans le menu "Créer" de Google Drive.

C'est un extrait de mon code:

<?php 

require_once dirname(__FILE__).'/google-api-php-client/src/apiClient.php'; 
require_once dirname(__FILE__).'/google-api-php-client/src/contrib/apiDriveService.php'; 

$apiClient = new apiClient(); 
$apiClient->setClientId(DRIVE_CLIENT_ID); 
$apiClient->setClientSecret(DRIVE_CLIENT_SECRET); 
$apiClient->setAssertionCredentials(new apiAssertionCredentials(
    OAUTH2_EMAIL, 
    array('https://www.googleapis.com/auth/drive.file'), 
    file_get_contents(SERVICE_ACCOUNT_PRIVATEKEY_FILE)) 
); 

$apiDriveService = new apiDriveService($apiClient); 

$file = new DriveFile(); 
$file->setTitle('filename.txt'); 
$file->setMimeType('text/plain'); 
$createdFile = $apiDriveService->files->insert($file, array(
    'data' => 'file content goes here....', 
    'mimeType' => 'text/plain' 
)); 

?> 

D'après ce que je comprends, une application peut utiliser le service de compte pour SDK Google Drive pour le compte d'un utilisateur. Cela signifie-t-il qu'il n'y a pas de question d'authentification (demande de permissions) à l'utilisateur? Alors, comment l'application s'authentifie-t-elle? Ou ma compréhension est probablement fausse? S'il vous plaît aidez-moi à m'éclairer ici.

Répondre

2

Le compte de service n'est pas pris en charge par le SDK du lecteur en raison de son modèle de sécurité. Ce que je suggère est d'ouvrir (ou de créer) un fichier à partir de l'interface utilisateur Web de Drive avec votre application et de stocker les jetons d'accès et d'actualisation récupérés après la fin du flux d'autorisation OAuth 2.0. À partir de votre travail cron, récupérez simplement ces informations d'identification pour envoyer des demandes autorisées à l'API Drive au nom de votre utilisateur.

+0

J'ai fait ça, et ça marche, merci! :) – Irwan

Questions connexes