0

いくつかの非消耗品の inApp 製品を含むアプリを開発しています。Google サーバーにリクエストを直接送信して結果を受け取ることで、それらの購入ステータスを取得する必要があります。私が理解しているように、「Purchase Status API」はその可能性を提供しますが、私にとってはうまくいきません。「Google API コンソール」で必要なすべての設定を行いました。「Google Play Android Developer API」をオンにしました。アプリのクライアント ID を作成しました。ここで説明されているメソッドを使用しようとしました: http://developer.android.com/google/play-services/auth.html しかし、メソッド GoogleAuthUtil.getToken(); および GoogleAuthUtil.getTokenWithNotification(); 「不明な例外」をスローしています。ただし、次のコードを使用してアクセス トークンを取得できました。

AccountManager acountM=AccountManager.get(Utils.curentActivity);
        Account[] acount=acountM.getAccountsByType("com.google");
        String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/androidpublisher";
        AccountManagerFuture<Bundle> future=acountM.getAuthToken(acount[0], AUTH_TOKEN_TYPE, null, Utils.curentActivity, null, null);
        try{
            String token=future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
        }catch(Exception e){e.printStackTrace();}

しかし、この後、このトークンをどうするかわかりません。このように認証しようとすると:

URL url=new URL("https://www.googleapis.com/oauth2/v1/userinfo?access_token="+token);
            URLConnection conection=url.openConnection();
            conection.setDoInput(true);
            conection.connect();
            InputStream is=conection.getInputStream();

「ファイルが見つからない例外」がスローされます。商品の購入状況を取得しようとすると、次のようになります。

String packageName=MainActivity.this.getPackageName();
            String productId="SKU_KEY_1";
            HttpClient client=new DefaultHttpClient();
            HttpGet get=new HttpGet("https://www.googleapis.com/androidpublisher/v1.1/applications/"+packageName+"/inapp/"+productId+"/purchases/"+token);
            HttpResponse response=client.execute(get);
            InputStream is=response.getEntity().getContent();
            String result=Utils.readInputStream(is);
            is.close();

結果は次のような JSON になります。

{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}

私は数日間必死に解決策を探しています。誰かがこの点に関する解決策または最新のドキュメントを提供してくれれば幸いです。

4

1 に答える 1

0

コードと情報を調べて、最初にアクセストークンを確認して、いくつかのことを試してみます。これを参考にしました。ブラウザーと単純な html ページ (以下を参照) を使用して、トークンを取得して検証することができます。そのページで指定されている値を入力する必要があります。

最初にトークンが正しいことを確認してください。これは、ブラウザでその userinfo アドレスを使用して行いました。

次に inapp purchase html location needs ?access_token={access_token} の後に最後に ?access_token={access_token} 承認に関する上記ページの「API へのアクセス」セクションに気付いた場合は、これを追加する必要があります。

これは、テスト用のトークンを取得するために使用した Web ページです。これはテスト用であり、承認トークンは短時間しか有効ではないため、最終的な解決策としては機能しないことに注意してください。そのアクセス トークンを取得するコードが正しく機能することを確認する必要があります。さらに、上記のページを再度参照して、製品についてこれを記入してください。これで動的な唯一のものは、そのページの指示に由来する「コード」値です。

これのいくつかがあなたを助けることを願っています...

<form action=" https://accounts.google.com/o/oauth2/token" method="post"> <input name="grant_type" type="hidden" value="authorization_code" /> <input name="code" type="hidden" value="the code from the previous step"/> <input name="client_id" type="hidden" value="the client ID token created in the APIs Console"/> <input name="client_secret" type="hidden" value="the client secret corresponding to the client ID"/> <input name="redirect_uri" type="hidden" value="the URI registered with the client ID"/> <input type="submit" />
</form>

于 2013-10-09T03:12:55.847 に答える