美文网首页
使用服务帐户(ServiceAccount)获取访问Google

使用服务帐户(ServiceAccount)获取访问Google

作者: MrDoy | 来源:发表于2017-11-12 17:12 被阅读0次
    前置知识
    1. RESTful API 格式
    2. Google API OAuth 2种认证方式
    User Story

    我们想通过访问 GooglePlay Voided Purchase API 获取某个应用的用户退款信息。而Google则提供了一个无效购买的查询接口。

    分析

    先来看看这个 API 的用例

    GET https://www.googleapis.com/androidpublisher/v2/applications/
    [your_package_name]/purchases/voidedpurchases?access_token=[your_auth_token]
    

    Voided Purchase API 的请求方式为GET,url需要的参数有2个,

    1. your_package_name 对应查询应用的包名,类似 com.google.android.apps.map 查询开发者账户设置的包名可知

    2. your_auth_token ,身份认证所需的token,也就是本文的获取重点。

    简要访问步骤

    1.获取服务账户 Service Account

    2.创建访问程序,加载Service Account文件,获取token并访问请求API

    如何创建服务账户 Service Account?

    Google API Console 的界面会有不定期的改动,因此功能位置有可能变动
    登录开发者的账号后, 在Google API Console的页面

    点击进入服务帐户管理页面

    根据指南,创建/选择 工程(project),然后创建服务帐户

    创建服务帐户

    创建认证文件

    点击Create Key

    选择JSON,并好好保存。

    选择JSON 好好保存

    注: 因为对于Voided Purchase API,我们需要读取财务数据,还需要对这个Service Account授予“查看财务报告(View financial reports)”的权限

    在程序中使用认证文件获取Token

    示例代码

    import java.io.FileInputStream;
    import java.util.Arrays;
    import java.util.List;
    
    import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    
    public class GoogleOAuth2ServiceAccountSample {
    
        /** OAuth 2.0 scopes. 重要,规范访问者的查看范围*/
        private static final List<String> SCOPES = Arrays.asList(
                "https://www.googleapis.com/auth/androidpublisher");
    
        public static void main(String[] args) {
            try {
                // 根据Service Account文件构造认证实例 GoogleCredential
                GoogleCredential credential = GoogleCredential
                        .fromStream(new FileInputStream(
                                "Google_Wallet-94e38f1f23f7.json"))// 加载服务帐户认证文件
                        .createScoped(SCOPES);
    
                // 刷新token
                credential.refreshToken();
    
                // 获取token
                System.out.println(credential.getAccessToken());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    参考资料

    无效购买API 指南(英语)
    Voided Purchase API
    Google API 入门(繁体)
    【JSDC客座文章】第一次接觸Google API就上手

    各种坑

    Google API的访问资料都比较分散,我查看了好几个示例代码都没有提及获取token的方法,以及多数是使用OAtuh2回调访问的教程(即类似跳转到Google登录界面,需要确认登录/授权xx应用的那种。)

    此外,虽然知道getAccessToken可以获取到token, 但一直是null, 查了StackOverFlow才知道需要先调用refreshToken.
    关于SCOPE,很多示例和代码都是提及username和mail address. 实际上对于Google内置API的访问,需要用到androidpublisher,否则一直返回403,没有授权。

    相关文章

      网友评论

          本文标题:使用服务帐户(ServiceAccount)获取访问Google

          本文链接:https://www.haomeiwen.com/subject/ktvctxtx.html