我正在开发一个应用程序,其中包含多个非消耗性 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"
}
}
我正在拼命寻找几天的解决方案。如果有人在这一点上为我提供解决方案或最新文档,我会很高兴。