0

我正在开发一个应用程序,其中包含多个非消耗性 inApp 产品,我需要通过直接向 Google 服务器发送请求并接收结果来获取这些产品的购买状态。据我了解,“购买状态 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 页面(见下文),我能够获取令牌并验证它。您需要填写该页面上指定的值。

首先确保您的令牌是正确的。我通过在浏览器中使用该用户信息地址来做到这一点。

接下来你inapp purchase html location需要在后面加上?access_token={access_token} 如果你注意到上面页面中关于授权的“访问API”部分,你需要添加这个。

这是我用来帮助获取测试令牌的网页。请注意,这是为了测试,不能作为最终解决方案,因为授权令牌仅在短时间内有效。您需要确保获取该访问令牌的代码正常运行。此外,再次参考上面的页面为您的产品填写此内容。唯一动态的是来自该页面上的说明的“代码”值。

希望其中的一些可以帮助你...

<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 回答