As it turns out, my steps were not correct. It took me weeks to figure this out and it doesn’t seem to be documented anywhere else. You’re welcome:
-
Create a Web Application account in the Google APIs Console. Put any website as a “redirect URI”; it doesn’t matter since you will not really be using it. You will get a client id and client secret when you create the account.
-
In a browser on your computer go to
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=[YOUR REDIRECT URI]&client_id=[YOUR CLIENT ID]
and allow access when prompted. -
Look in the address bar. At the end of the URI you entered originally will be your refresh token. It looks like
1/....
You will need this “code” in the next step. The refresh token never expires. -
Convert this “code” to a “refresh token” by going to
https://accounts.google.com/o/oauth2/token?client_id=[YOUR CLIENT ID]&client_secret=[YOUR CLIENT SECRET]&code=[CODE FROM PREVIOUS STEP]&grant_type=authorization_code&redirect_uri=[YOUR REDIRECT URI]
. You can save the resulting value right in your program; it never expires unless explicitly revoked. (this step inserted by @BrianWhite — see comments)
Make sure you are using POST.(inserted by Gintas) -
In your code, send an HttpPost request to
https://accounts.google.com/o/oauth2/token
with the BasicNameValuePairs"grant_type","refresh_token"
,"client_id",[YOUR CLIENT ID]
,"client_secret",[YOUR CLIENT SECRET]
,"refresh_token",[YOUR REFRESH TOKEN]
. For an example look here. You will need to do this in a separate thread, probably using AsyncTask. This will return a JSONObject. -
Get the access token from the returned JSONObject. For an example look here. You will need to get the string “access_token”. The access token expires in 1 hour.
-
In your code, send an HttpGet request to
https://www.googleapis.com/androidpublisher/v1/applications/[YOUR APP'S PACKAGE NAME]/subscriptions/[THE ID OF YOUR PUBLISHED SUBSCRIPTION FROM YOUR ANDROID DEVELOPER CONSOLE]/purchases/[THE PURCHASE TOKEN THE USER RECEIVES UPON PURCHASING THE SUBSCRIPTION]?accesstoken="[THE ACCESS TOKEN FROM STEP 4]"
. For an example look here.