这是一次令人沮丧的经历。我正在尝试访问Google Cloud Storage(列出任何人的存储桶访问权限),并通过Android通过A >>>>>>>>>>>>>> 帐户。
这是我的代码:
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.InputStreamContent;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.storage.Storage;
import com.google.api.services.storage.model.Bucket;
import com.google.api.services.storage.model.StorageObject;
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
Credential credential = new GoogleCredential.Builder()
.setClientSecrets("ANDROID_CLIENT_ID_FROM_DEV_CONSOLE", "some random string, since no clienet secret for android")
.setJsonFactory(jsonFactory)
.setTransport(httpTransport)
.build();
credential.setAccessToken(token);
Storage storage = new Storage.Builder(httpTransport, jsonFactory,
credential)
.setApplicationName("My app name")
.build();
List<StorageObject> objects = storage.objects().list("my-bucket").execute().getItems()
注意事项:
我得到有效的OAuth令牌,其中具有以下范围:" oauth2:https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_write.write"
我有Google Cloud Storage JSON API和Google Cloud Storage在我的Cloud Dev Console的API部分中启用。
作为替代方案,我尝试使用serivce帐户进行设置(即创建GoogleCredential时使用SetServiceAccountId(...)之类的方法),它可以很好地工作。但是,根据上述代码段!
,我希望它代表授权用户工作我的所有代码都在com.mytestapp包中。这是我在创建Android客户端ID时指定的软件包。
我正在通过Android Studio的调试器启动该应用程序,而该应用程序是在我的物理Android设备上启动的。
问题语句:
在执行上面的列表存储器操作时,我得到了此JSON例外:
com.google.api.client.googleapis.json.googlejsonresponseException:403禁止{ "代码":403, "错误":[{{ "域":" usagelimits", "消息":"未配置访问。您的项目未启用API(云存储API)。 我在做什么错?是因为我不是在设置客户秘密吗?(我认为不再为Android提供客户秘密)。还是应用程序名称必须非常具体?我将其设置为一些自由形式的文本字符串。 我认为这应该简单明了! 至少 - 是否有一个连贯的,完整的示例,说明Android上的 nonservice 帐户如何执行此操作?我在整个地方搜索没有任何运气。
好的,我解决了它。该应用程序的SHA1签名是错误的。因此,它与Google之间的凭据不匹配。