您在哪里找到Google云端存储" accessToken"

时间:2016-06-02 12:53:49

标签: android

我在Android应用中使用Google云端存储,如下所示:

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和Google云端存储客户端API的文档几乎没有任何帮助。目前我传递给setAccessToken方法的是 Android密钥(由我在开发者控制台上找到的Google服务 API密钥自动创建。

我一直都知道这不是正确的,但这是我唯一的凭证。

我作为accessToken发送什么内容?

修改 仅仅为了记录,我按照步骤创建了服务帐户密钥,因为该网站说明了我对GCS的需求。然后我下载了生成的JSON文件。但我不知道如何使用它来验证我的Android应用程序。我不使用任何用户数据,但需要将GCS用于我应用的自有数据,这意味着我需要服务帐户。

1 个答案:

答案 0 :(得分: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")));