1

Может ли кто-нибудь показать рабочий пример кода, как использовать google drive api для установленного приложения? (access_type = offline) Я нашел несколько объяснений, но не могу добраться до рабочего потока.Google Drive Api для установленного приложения C#

Благодаря

+0

http://www.daimto.com/category/googledrive/ – DaImTo

+0

спасибо, но это не то, что я ищу. Я не хочу, чтобы пользователь принимал что-либо, на самом деле мне вообще не нужен пользователь (для начала), я хочу, чтобы меня всегда регистрировали из той же учетной записи, которую я открыл для приложения. – user3131889

+0

Затем вам нужно посмотреть учетную запись службы. У меня нет примеров чистых дисков с учетной записью службы. Код проще http: //www.daimto.com/googleanalytics-authentication-csharp/# Google_Analytics_API_Service_Account_Authentication Не многие используют Google диск с учетной записью службы, потому что вы не можете посмотреть, что загружено через веб-сайт. – DaImTo

ответ

2

Ok, То, что я использовал, по крайней мере, не было «установленным приложением», а «веб-приложением». Эти шаги, чтобы сделать:

  1. Перейти к консоли разработчика Google и создать проект.

  2. Перейти к API, & Auth

  3. На APIs позволяют Drive API & Drive SDK.

4.ON Полномочия Создать новый идентификатор клиента для веб-приложения (Создать экран Согласия, evev хотя мы не будем использовать его.)

В Create ID окне клиента, добавьте URL "https://developers.google.com/oauthplayground »к УПОЛНОМОЧЕННОМУ РЕПИРЕНТУ URIS.

5.Go к URL вы добавили на номер 4

6.Click шестерня справа и Configure:

OAuth flow: Server-side 

Access type: Offline 

Use your own OAuth credentials: Tick 

Then copy your Client ID & Secret from the console. 

7.On слева выберите Drive API ->https://www.googleapis.com/auth/drive, щелкните Авторизованные API

8. Откроется новое окно с просьбой принять Google OAuth ... нажмите «Принять».

9.Нажмите код авторизации Exchange для токенов.

10.Copy & Сохранить Acess & Обновить жетоны.

Код:

private static DriveService CreateServie(string applicationName) 
{ 
    var tokenResponse = new TokenResponse 
    { 
    AccessToken = yourAccessToken, 
    RefreshToken = yourRefreshToken, 
    }; 

    var apiCodeFlow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer 
    { 
    ClientSecrets = new ClientSecrets 
    { 
     ClientId = yourClientID, 
     ClientSecret = yourClientSecret 
    }, 
    Scopes = new[] { DriveService.Scope.Drive }, 
    DataStore = new FileDataStore(applicationName) 
    }); 

    var credential = new UserCredential(apiCodeFlow, yourEMail, tokenResponse); 

    var service = new DriveService(new BaseClientService.Initializer 
    { 
    HttpClientInitializer = credential, 
    ApplicationName = applicationName 
    }); 

    return service; 
} 
1

Это мой вспомогательный класс я использую Любопытное tweeked это для Вас Google Drive. Помните, что учетная запись службы НЕ ВАС. Просто потому, что вы его создаете, это не значит, что он будет иметь доступ к файлам на вашей учетной записи в Google Диске. У учетных записей службы есть собственная организация, у которой есть пользователь sudu. Это создает основную услугу диска, который вы можете использовать, чтобы следовать другие уроки, которые я создал, которые используют нормальный oauth2

/// <summary> 
/// Authenticating to Google using a Service account 
/// Documentation: https://developers.google.com/accounts/docs/OAuth2#serviceaccount 
/// </summary> 
/// <param name="serviceAccountEmail">From Google Developer console https://console.developers.google.com</param> 
/// <param name="keyFilePath">Location of the Service account key file downloaded from Google Developer console https://console.developers.google.com</param> 
/// <returns></returns> 
public static DriveService AuthenticateServiceAccount(string serviceAccountEmail, string keyFilePath) 
{ 

    // check the file exists 
    if (!File.Exists(keyFilePath)) 
    { 
     Console.WriteLine("An Error occurred - Key file does not exist"); 
     return null; 
    } 

    string[] scopes = new string[] { DriveService.Scope.Drive};  // View analytics data    

    var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable); 
    try 
    { 
     ServiceAccountCredential credential = new ServiceAccountCredential(
      new ServiceAccountCredential.Initializer(serviceAccountEmail) 
      { 
       Scopes = scopes 
      }.FromCertificate(certificate)); 

     // Create the service. 
     DriveService service = new DriveService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = "Drive API Sample", 
     }); 
     return service; 
    } 
    catch (Exception ex) 
    { 

     Console.WriteLine(ex.InnerException); 
     return null; 

    } 
} 

вы это называете, как этот

var x = AuthenticationHelper.AuthenticateServiceAccount("[email protected]ccount.com",@"C:\Users\LL\Downloads\Diamto Test Everything Project-e8bf61cc9963.p12"); 

Учебник: Google Drive API with Service Account C#

+0

Спасибо за образец. Я пытаюсь, но получаю сообщение об ошибке: Ошибка: "invalid_grant", Описание: "", Uri: "" – user3131889

+0

Дважды проверьте адрес электронной почты учетной записи службы и местоположение файла ключа. Вам необходимо отправить полный путь к ключевому файлу c: \ temp \ x.p12 – DaImTo

+0

это мой код: var certificate = new X509Certificate2 ("D: \\ Temp \\ QRApp-f21b8eb0bc66.p12", "notasecret" , X509KeyStorageFlags.Exportable); ServiceAccountCredential учетных = новый ServiceAccountCredential ( новый ServiceAccountCredential.Initializer ("[email protected]") { Скоупс = прицелы } .FromCertificate (сертификат)); Что случилось? – user3131889