最後に、Google API にアクセスするための OAuth2 認証に関する最近の問題を解決することができました。
しかし、サブスクリプションに関するステータス情報を取得するために Android 開発者 API をクエリしているときに行き詰まりました。次の REST API 呼び出しを使用しています。
https://www.googleapis.com/androidpublisher/v1/applications/ APP_PACKAGE /subscriptions/ SUBSCRIPTION_ID /purchases/ PURCHASE_TOKEN ?access_token= AUTH_TOKEN
- APP_PACKAGE開発者コンソール にアップロードしたアプリケーションのパッケージ名
- SUBSCRIPTION_IDアプリに指定されたサブスクリプション ID (開発者コンソール)
- PURCHASE_TOKEN (まだダミー) 購入トークン
- AUTH_TOKEN OAuth2 から取得した認証トークン。
このリクエストの認証トークンは次のように取得します。
// Build the HTTP parameter
Map<String,String> params = [:]
params.put("grant_type", "refresh_token")
params.put("refresh_token", googleRefreshToken.encodeAsURL())
params.put("client_id", googleClientId.encodeAsURL())
params.put("client_secret", googleClientSecret.encodeAsURL())
// Send the POST request
// This action might throw an exception in case any parameter were wrong, invalid or not specified.
String result = HttpRequestHandler.sendRequest("https://accounts.google.com/o/oauth2/token", params);
JSONElement jsonResult = JSON.parse(result)
これは問題なく動作しますが、上記の REST 呼び出しは 500 エラーを返します (メッセージは何も表示されません)。
{
"error": {
"code": 500,
"message": null
}
}
一部の人々がほぼ同様の問題を抱えていることを読みましたが、キャンセル APIに連絡した場合のみです。
いくつかの情報:
- クライアント ID に属する google-user は、Android アプリの所有者でもあります
- アプリはまだ公開されていません
- アプリは com.android.vending.BILLING アクセスを許可します
- アプリ内にダミーの BillingService と BillingReceiver も実装しました
エラー メッセージが表示されないため、現在続行する方法がわかりません。他の誰かがこの問題を知っていますか?
編集1
さまざまなテストケースで遊んでいると、非常に奇妙な結果が得られました。例: 7 文字以下の PURCHASE_TOKEN を使用すると、次の応答が返されます。
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "The subscription purchase token was not found.",
"locationType": "parameter",
"location": "token"
}
],
"code": 404,
"message": "The subscription purchase token was not found."
}
}
PURCHASE_TOKEN > 7 文字を使用すると、まだ 500 エラーが発生します。ここからコピーされたトークンの例のように: rojeslcdyyiapnqcynkjyyjh
編集2
時々、サーバーはランダムに 503 バックエンド エラーを返します。
{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error"
}
],
"code": 503,
"message": "Backend Error"
}
}
編集3
(直接 URL 呼び出しの代わりに) Java API を使用すると、同じエラーが発生します。
// Build token for the response
TokenResponse tokenResponse = new TokenResponse();
tokenResponse.setAccessToken(googleAccessToken);
tokenResponse.setRefreshToken(googleRefreshToken);
tokenResponse.setExpiresInSeconds(3600L);
tokenResponse.setScope(OAuth2Handler.SCOPE_ANDROID_PUBLISHER);
tokenResponse.setTokenType("Bearer");
// Init credential container
HttpRequestInitializer credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(googleClientId, googleClientSecret)
.build()
.setFromTokenResponse(tokenResponse);
// Connect to the android publisher API
Androidpublisher publisher = new Androidpublisher.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName("NameOfMyApplicationInGooglePlayStore")
.build();
// Retrieve subscription purchase information
Androidpublisher.Purchases purchases = publisher.purchases();
Androidpublisher.Purchases.Get get = purchases.get(
packageName,
subscriptionId,
purchaseToken
);
// Analyse result
SubscriptionPurchase subscription = get.execute();
よろしく、 クリストファー