2016-06-02 4 views
0
маркер доступа

я использую Google Cloud Storage от моего Android приложения следующим образом:Где вы находите Google Cloud Storage ""

private static Storage buildService() throws IOException, GeneralSecurityException { 
    HttpTransport transport = new com.google.api.client.http.javanet.NetHttpTransport(); 
    JsonFactory jsonFactory = new JacksonFactory(); 
    GoogleCredential credential = new GoogleCredential().setAccessToken("***"); 


    if (credential.createScopedRequired()) { 
     Collection<String> scopes = StorageScopes.all(); 
     credential = credential.createScoped(scopes); 
    } 

    return new Storage.Builder(transport, jsonFactory, credential) 
      .setApplicationName("Sup GCS") 
      .build(); 
} 

И я получаю следующее сообщение об ошибке:

06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err: com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err: { 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err: "code" : 401, 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err: "errors" : [ { 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err:  "domain" : "global", 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err:  "location" : "Authorization", 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err:  "locationType" : "header", 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err:  "message" : "Invalid Credentials", 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err:  "reason" : "authError" 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err: } ], 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err: "message" : "Invalid Credentials" 
06-02 18:17:51.891 26468-26570/com.sup.sup W/System.err: } 

У меня нет ни малейшего понятия, где найти, что accessToken и документы для API Google Cloud Storage Client практически не помогают. В настоящее время, что я прохожу в метод setAccessToken является Android Key (автоматический созданный Google Service API Key я нашел на моей консоли разработчика.

Я всегда знал, что это не правильный, но это был единственный вид верительных я имею

Что я могу отправить как мой accessToken

Edit:.? только для записи, я последовал шаги, чтобы создать Service Key аккаунт в потому сайт сказал, что что мне нужно для GCS. Затем я загрузил созданный JSON-файл. Но я не знаю, как аутентифицировать приложение для Android с этим. Я не пользуюсь никакими пользовательскими данными,, но мне нужно использовать GCS для собственных данных моего приложения, что означает, что мне понадобится сервис.

ответ

0

Хорошо, я не смог найти свой accessToken, но я нашел обходное решение, не используя accessToken для аутентификации. Я создал ключ учетной записи службы (как упоминалось в первом вопросе вопроса), и файл JSON был загружен на мой компьютер. Я не мог, конечно, использовать этот файл напрямую, потому что он тоже должен был быть в моей файловой системе телефона Android. Итак, вот как я аутентифицирован с этим файлом:

Сначала я взял этот файл JSON и скопировал его содержимые в String: (я цензура информации, как я чувствовал себя необходимым)

private static String credential_json = "{\n" + 
      " \"type\": \"service_account\",\n" + 
      " \"project_id\": \"***\",\n" + 
      " \"private_key_id\": \"***\",\n" + 
      " \"private_key\": \"***\",\n" + 
      " \"client_email\": \"***@***.iam.gserviceaccount.com\",\n" + 
      " \"client_id\": \"***\",\n" + 
      " \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n" + 
      " \"token_uri\": \"https://accounts.google.com/o/oauth2/token\",\n" + 
      " \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n" + 
      " \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/***%40***.iam.gserviceaccount.com\"\n" + 
      "}"; 

Далее я преобразовал эту credential_json строки в поток, и создал GoogleCredential из этого потока. Для Google это было так же хорошо, как чтение из файла:

GoogleCredential credential = GoogleCredential.fromStream(new ByteArrayInputStream(credential_json.getBytes("UTF_8"))); 
Смежные вопросы