2013-05-07 2 views
0

Я пытаюсь выполнить пример из:Как проверить подлинность в таблицах Fusion с OAuth v2

https://code.google.com/p/google-api-java-client/source/browse?repo=samples#hg%2Ffusiontables-cmdline-sample

который в основном пример того, как идентифицировать и использовать Fusion API. Я не могу заставить его работать ... на данный момент:

// authorize 
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); 

Браузер показывает «Ошибка: redirect_uri_mismatch».

Странно, что другие примеры, которые аутентифицируются с помощью Oauth (google plus API и облачного хранилища), не используют тот же подход, что и этот, который в основном состоит в использовании файла JSON, который вы можете скачать после создания учетной записи службы через консоль API.

На самом деле, есть вопрос, который использует подход из этих примеров:

Google Fusion Tables 400 invalid_grant

Мой главный вопрос is..which один правильный? Я не уверен в этом

Второй - это ... этот пример ищет элемент, называемый клиентским секретом в файле JSON, которого у меня нет. Я не думаю, что это является причиной, что делает код не работоспособным, но мне интересно, что этот клиент-секрет штуковина является ...

Некоторые идеи о том, как действовать будет весьма признателен

Спасибо ! Alex

ответ

0

Ну, если кто-то находится в той же ситуации, что и я, я отправлю решение, которое, как мне показалось, работает. То, что я сделал в основном, было изменено примером (особая благодарность Christian Junk за его работу), поэтому он больше похож на другие примеры (хранение и плюс), когда дело доходит до аутентификации.

HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 

    // check for valid setup 
    if (SERVICE_ACCOUNT_EMAIL.startsWith("Enter ")) { 
     System.err.println(SERVICE_ACCOUNT_EMAIL); 
     System.exit(1); 
    } 
    String p12Content = Files.readFirstLine(new File("key.p12"), Charset.defaultCharset()); 
    if (p12Content.startsWith("Please")) { 
     System.err.println(p12Content); 
     System.exit(1); 
    } 
    // service account credential (uncomment setServiceAccountUser for domain-wide delegation) 
    GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
     .setJsonFactory(JSON_FACTORY) 
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
     .setServiceAccountScopes(FusiontablesScopes.FUSIONTABLES) 
     .setServiceAccountPrivateKeyFromP12File(new File("key.p12")) 
     // .setServiceAccountUser("[email protected]") 
     .build(); 


    // set up global FusionTables instance 
    fusiontables = new Fusiontables.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build(); 

Это отличается от подхода первоначального примера, но это работает для меня, и я мог бы перечислить таблицы, создавать новые, заполнять их и удалять их.

Я просто хочу, чтобы примеры были более легкими для поиска на страницах документации Oauth и Fusion, это спасло бы мне какое-то драгоценное время :)