我正在使用Google API Client Library for Java来获取有关在我的Android应用程序中购买的用户订阅的信息.这就是我现在正在做的事情:
HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(GOOGLE_CLIENT_MAIL)
.setServiceAccountScopes("https://www.googleapis.com/auth/androidpublisher")
.setServiceAccountPrivateKeyFromP12File(new File(GOOGLE_KEY_FILE_PATH))
.build();
Androidpublisher publisher = new Androidpublisher.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).
setApplicationName(GOOGLE_PRODUCT_NAME).
build();
Androidpublisher.Purchases purchases = publisher.purchases();
Get get = purchases.get("XXXXX", subscriptionId, token);
SubscriptionPurchase subscripcion = get.execute(); //Exception returned here
Run Code Online (Sandbox Code Playgroud)
GOOGLE_CLIENT_MAIL是来自Google控制台的API Access的电子邮件地址.
GOOGLE_KEY_FILE_PATH是从API Access下载的p12文件.
GOOGLE_PRODUCT_NAME是品牌信息的产品名称.
在Google APIS控制台中,启用了"Google Play Android Developer API"服务.
我得到的是:
{
"code" : 401,
"errors" : [ {
"domain" : "androidpublisher",
"message" …Run Code Online (Sandbox Code Playgroud) reauthenticate()在Firebase中使用的示例仅显示如何重新验证使用电子邮件和密码签名的用户:
AuthCredential credential = EmailAuthProvider.getCredential("user@example.com", "password1234");
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential);
Run Code Online (Sandbox Code Playgroud)
我也知道如何使用Facebook Provider(credential = FacebookAuthProvider.getCredential(AccessToken.getCurrentAccessToken().toString()))重新进行身份验证.
问题是Google API中没有等效方法来获取当前的访问令牌并最终获得AuthCredential.那么getCredential()在这种情况下我会传递什么?
我有一个Google Apps帐户.我正在尝试使用服务帐户代表用户发送电子邮件.
我已经浏览了互联网,没有任何工作,我几乎不知所措.
我跟着Java指南,我仍然继续 com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
为什么这段代码片段给我401 Unauthorized?
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("something@something-something.iam.gserviceaccount.com")
.setServiceAccountPrivateKeyFromP12File(new File("path/to/file/myProject.p12"))
.setServiceAccountScopes(GmailScopes.all())
.setServiceAccountUser("user@mydomain.org")
.build();
Gmail gmailService = new Gmail.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName("My App") // DOES IT MATTER WHAT THIS IS SET TO?
.build();
MimeMessage mimeMessage = createEmail("myemail@gmail.com", "user@mydomain.org", "Testing", "hey");
sendMessage(gmailService, "me", mimeMessage);
Run Code Online (Sandbox Code Playgroud)
这些方法基本上是从Googles文档中复制/粘贴的:
/**
* Create a MimeMessage using the parameters provided.
*
* @param to email address of the receiver
* @param …Run Code Online (Sandbox Code Playgroud) android ×2
google-api ×2
firebase ×1
gmail-api ×1
google-apps ×1
google-play ×1
java ×1
oauth ×1
subscription ×1