Waqas Khalid
Waqas Khalid

Reputation: 11

Google play API returns error

i am getting the same issue as described in this post

. we have used almost exactly the same code. i have tried both with Client ID and Email address of the google service account in below mehotd

setServiceAccountId(GOOGLE_SERVICE_CLIENT_EMAIL) OR
setServiceAccountId(GOOGLE_CLIENT_ID)

error changes with the change in a/c id. if i use client id, error is

400 Bad Request { "error" : "invalid_grant" }

and if i use service email id, error is

401 Unauthorized {   
"code" : 401,   "errors" : [ {
    "domain" : "androidpublisher",
    "message" : "This developer account does not own the application.",
    "reason" : "developerDoesNotOwnApplication"   } ],   "message" : "This developer account does not own the application." }

any idea?

Upvotes: 1

Views: 2562

Answers (1)

haemish
haemish

Reputation: 426

There appears to be some evidence that Google Play API does not currently work with Service Accounts (madness). There is another thread on the issue here. You can read about the Google Service Accounts here. You can read about authentication for Android Google Play API here.

Once you have done the dance on the Google API Console to get a refresh_token you can get an access token like this:

private String getAccessToken()
{

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/token");
    try 
    {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
        nameValuePairs.add(new BasicNameValuePair("grant_type",    "refresh_token"));
        nameValuePairs.add(new BasicNameValuePair("client_id",     "YOUR_CLIENT_ID);
        nameValuePairs.add(new BasicNameValuePair("client_secret", "YOUR_CLIENT_SECRET"));
        nameValuePairs.add(new BasicNameValuePair("refresh_token", "YOUR_REFRESH_TOKEN"));
        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = client.execute(post);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer buffer = new StringBuffer();
        for (String line = reader.readLine(); line != null; line = reader.readLine())
        {
            buffer.append(line);
        }

        JSONObject json = new JSONObject(buffer.toString());
        return json.getString("access_token");
    }
    catch (IOException e) { e.printStackTrace(); }
    catch (JSONException e) { e.printStackTrace(); }
    return null;
}

Upvotes: 2

Related Questions