这是一次令人沮丧的经历。我正在尝试访问Google云端存储(向所有人列出存储桶访问权限),并通过非服务帐户从Android进行操作。
这是我的代码:
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”
我在Cloud Dev Console的API部分启用了Google Cloud Storage JSON API和Google Cloud Storage。
作为替代方案,我尝试使用serivce帐户进行设置(即在创建GoogleCredential时使用setServiceAccountId(...)等方法)并且它完美运行。但我希望这可以代表授权用户工作,如上面的代码片段所示!
我的所有代码都在com.mytestapp包中。这是我在创建Android客户端ID时指定的包。
我正在通过Android Studio中的调试器启动应用,同时应用程序在我的物理Android设备上启动。
问题陈述:
在执行上面的列表存储区操作期间,我得到了这个Json异常:
com.google.api.client.googleapis.json.GoogleJsonResponseException:403 Forbidden { “代码”:403, “错误”:[{ “domain”:“usageLimits”, “message”:“未配置访问权限。您的项目未启用API(云存储API)。............}
我做错了什么?是因为我没有设置客户端密码吗? (我认为Android不再是客户机密)。或者应用程序名称必须非常具体?我将它设置为一些自由格式的文本字符串。
我认为这应该是简单明了的!
至少 - 是否有针对Android上非服务帐户如何执行此操作的连贯完整示例?我搜遍了整个地方,没有任何运气。
答案 0 :(得分:0)
好的,我解决了。应用程序的SHA1签名是错误的。因此,它与Google之间的凭据不匹配。