google play 内购数据拉取

Posted Foto_cjShow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了google play 内购数据拉取相关的知识,希望对你有一定的参考价值。

拉取 google play console后台内购数据收入。

1:查看官方文档:

 https://support.google.com/googleplay/android-developer/answer/6135870?visit_id=638180953496505768-3845517287&p=stats_export&rd=1#export

这里采用 从Google Cloud Storage 下载报表-》使用用户端程式库和服务帐户下载报表

 

2:准备工作。

 1; 从文档的步骤开始,新建立项目。注意是google developers console后台,不是google play console后台。新建项目,在 IAM和管理中-》添加一个服务账号-》生成秘钥。下载的json文件保留。

 

 

2;添加权限。需要将这里添加的服务账号邮件添加到 goole play console 后台, 权限需要有能下载报表的权限

    

 

 3:Storage sdk初始化

文档中表示,google play console后台的内购收入会每天往Google Cloud Storage的某个zip包添加数据,

我们需要从storage中下载zip包,解析里面的数据就行。通过上面的关联,我们可以通过新建的google cloud账号api去下载google play每天更新的storage中的zip.

 

在后台开启api权限

 

添加storage SDK 参考:https://cloud.google.com/storage/docs/reference/libraries#client-libraries-install-java

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.13.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-storage</artifactId>
  </dependency>

 

storage初始化

    public void initApay() 
        String projectId = "pc-api-8153";//准备工作中那个新建项目的id-- projectId
        InputStream is = AndroidPayHelper.class.getResourceAsStream("/firebaseauth/pay_android_key.json");//下载的json文件
        try 
            GoogleCredentials credentials = GoogleCredentials.fromStream(is)
                    .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/devstorage.read_only"));

            Storage storage = StorageOptions.newBuilder()
                    .setCredentials(credentials)
                    .setProjectId(projectId)
                    .build()
                    .getService();
         catch (IOException e) 
            System.out.println(e);
        
    

 

 4:数据拉取

参考:https://cloud.google.com/storage/docs/downloading-objects?hl=zh-CN#storage-download-object-java

 1,google play 后台查看storage的url和bucket:类似--  gs://pubsite_prod_8153303996/sales/

,

2,得到的是 gs://pubsite_prod_8153303996/sales/ 其中pubsite_prod_8153303996 就是bucketName(注意:这个是复制出来的,跟前面项目的projectId不是一个)。展示一下storage下面的文件

 

     String bucketName = "pubsite_prod_8153303996";
     Page<Blob> buckets = storage.list(bucketName);
     for (Blob bucket : buckets.iterateAll()) 
          System.out.println(bucket.getName());
     

 

打印出来的会有很多,只需要注意 sales开头的就行:这些就是需要下载的内购数据。

sales/salesreport_202302.zip
sales/salesreport_202303.zip
sales/salesreport_202304.zip

 

3,zip数据下载

        String bucketName = "pubsite_prod_8153303996";
        BlobId blobId = BlobId.of(bucketName, "sales/salesreport_202304.zip");
        Blob blob = storage.get(blobId);
        byte[] content = blob.getContent();

        try 
            byte[] bytes = GzipUtils.unZip(content);
            String body = new String(bytes, StandardCharsets.UTF_8);
            putData(body);
         catch (Exception e) 
            TaskLoggerUtil.Error(className + " unzip error:", e);
        

 

4,下载的锁zip包,需要解析:

public static byte[] unZip(byte[] data) throws IOException 
        byte[] b = null;
        ByteArrayInputStream bis = new ByteArrayInputStream(data);
        ZipInputStream zip = new ZipInputStream(bis);
        while (zip.getNextEntry() != null) 
            byte[] buf = new byte[1024];
            int num = -1;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while ((num = zip.read(buf, 0, buf.length)) != -1) 
                baos.write(buf, 0, num);
            
            b = baos.toByteArray();
            baos.flush();
            baos.close();
        
        zip.close();
        bis.close();

        return b;
    

 

5,分析数据

        String cDate = "2023-04-23";//表里的数据是这个月所有数据,如果只需要一天的,需要筛选
        String[] separated = datas.split("\\n");//拆分行
        int len = separated.length;
        for (int i = 1; i < len; i++) 
            String[] row = separated[i].split(",");//拆分列,每一行数据是通过,组成的

            //日期
            String date = DateUtils.dateConvertionYs(String.valueOf(row[1]));//这里是将yyyy/MM/dd转为yyyy-MM-dd方便比较
            if (!cDate.equals(date)) continue;

            String packId = row[6];//包名
            //收益
            float proceeds = Float.parseFloat(row[12]);//收入
        

 

 

5:展示数据

数据跟ios一样,需要自己通过汇率转为一种货币,方便计算。

 

 

参考文档:https://support.google.com/googleplay/android-developer/answer/6135870?visit_id=638180953496505768-3845517287&p=stats_export&rd=1#export

https://cloud.google.com/storage/docs/downloading-objects?hl=zh-CN#storage-download-object-java

怎么切换google play 地区

切换方法如下:

1、商店内,点击三,如下。

2、接下来需要点击【账号】,如下。

3、接下来需要点击账号偏好设置,如下。

4、点击【添加信用卡或借记卡】,如下。

5、点继续,即可将你的国家地区切换为日本。

6、切换之后效果如下,商店都是日本地区了的。注意一年之内只可以切换一次,官方说法。

参考技术A

google play的地区是根据访问的ip自动识别的,故按照如下步骤操作:

1,清空google play商店缓存数据

2,重新连接目标地区IP的vpn

3,重新打开登陆google play商店即可

具体操作方法如下:

1,清空缓存:应用程序管理内找到google play商店,删除数据,如下图

2,连接目标地区对应的ip地址

①获取ip方法:

vpn运营商的官网“用户中心”内

②配置vpn的方法:ip部分选择获取的目标地区的ip即可

③连接成功如下:


3,重新登陆google play商店即可

参考技术B

如果你的你在Google play商店没有消费,既购买APP、下载免费书、免费音乐的话,你是可以更改你的Play商店地区的,否则不能更改,如需更改,参见以下步骤:

    准备好你所使用国家的VPN,保持网络通畅

    清除Google Play Store、Google Services数据及Cache

    重新使用你所要更改Play地区的Google账户登录Play Store

    选择娱乐当中的数据,随便选择一本免费书籍下载,待下载成功后,你的Play国家就会被绑定,以後不可再更改

参考技术C 可以按以下步骤操作:
1:进入“系统设置”-“管理账户”-“添加账户”-选“google”-“下一步”-选择“创建”或“登录”。
2:登陆完成后退出系统设置,打开google play,在左上角的购物袋图标旁切换gmail账户。本回答被提问者采纳
参考技术D 可以按以下步骤操作:
1:进入“系统设置”-“管理账户”-“添加账户”-选“google”-“下一步”-选择“创建”或“登录”。
2:登陆完成后退出系统设置,打开google play,在左上角的购物袋图标旁切换gmail账户。

以上是关于google play 内购数据拉取的主要内容,如果未能解决你的问题,请参考以下文章

Android Google Pay 集成

google应用内购(in app billing),点击购买无响应

google play服务是干啥的?

无法登陆google play怎么办?说与服务器连接不上。

删除 google play 游戏数据后卡住无法登录

为啥我的google play一直显示网络连接失败?