清除Android应用商店本地缓存的计费信息?

3
我正在使用 Android Billing API V3 查询来自 Play 商店的购买信息。我想知道是否有可能清除本地缓存。
V3 为计费 API 添加了本地缓存功能,以减少网络流量。我有一个更新服务,每天运行一次,该服务更新我的元数据,因为我在应用程序中显示成本,所以我希望清除本地缓存并触发更新,以防价格已更新,以确保显示正确的价格。
文档说:
由于 Google Play 客户端现在在设备上本地缓存应用内计费信息,因此您可以使用 Version 3 API 更频繁地查询此信息,例如通过 getPurchases 调用。与 API 的早期版本不同,许多 Version 3 API 调用将通过缓存查找而不是通过与 Google Play 的网络连接服务,这显着加速了 API 的响应时间。
3个回答

1

嗯,但我为将来的某个人提供了一个解决方案。 - Lasitha Lakmal

0
尝试这个:
添加这个Application类:
package com.hrupin.cleaner;

import java.io.File;

import android.app.Application;
import android.util.Log;

public class MyApplication extends Application {
    private static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static MyApplication getInstance() {
        return instance;
    }

    public void clearApplicationData() {
        File cache = getCacheDir();
        File appDir = new File(cache.getParent());
        if (appDir.exists()) {
            String[] children = appDir.list();
            for (String s : children) {
                if (!s.equals("lib")) {
                    deleteDir(new File(appDir, s));
                    Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
                }
            }
        }
    }

    public static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }

        return dir.delete();
    }
}

然后,从任何Activity中进行此调用:

MyApplication.getInstance().clearApplicationData();

参考:

如何以编程方式清除Android应用程序中的用户数据

谢谢。


感谢您的回复,很抱歉我还没有机会处理它。由于我的开发者帐户存在配置问题,我在这个任务上被阻塞了。我认为计费API缓存不会在我的应用程序缓存下,因为我怀疑它将跨越所有应用程序,考虑到与Play计费API集成的性质(向其服务发送意图,该服务运行在我的应用程序范围之外)。 - Syntax
实际上,谷歌应用商店在应用程序的数据存储中缓存每个应用程序相关的库存项目并不是一个荒谬的建议。 - Carlos P

0

很遗憾,Google Play客户端是在进行缓存,而没有公开的API可以清除缓存。

我不明白为什么你想要清除缓存?Google Play客户端会被通知任何更改,并相应地使其缓存失效。只需假设返回的调用是正确的即可。


鉴于该服务没有暴露任何控件,我认为你是正确的,我只能假设调用始终是正确的。干杯! - Syntax
1
我成功地通过以下两个步骤删除了以前的购买记录:1. 手动取消 Google Checkout 中的交易,2. 清除 Google Play 商店的数据(而不是缓存)。 - n0rm1e
4
我一直在尝试清除缓存,因为应用内购买似乎不能立即在多个设备间同步(我在一个设备上购买,然后去另一个设备,但 Google Play 服务的响应似乎被缓存了,因此项目仍未购买)。我发现了其他相关的问题,例如https://dev59.com/oGMl5IYBdhLWcg3wkXlx,但是还没有找到正确的答案... - jrub
我注意到有时候Google Play客户端不会及时清除缓存,例如:我创建了三个订阅,其中一个我首先保存为非活动状态,然后再保存为活动状态。而另外两个我一开始就保存为活动状态。Google Play大约返回了两个订阅约两个小时,然后我清除了Google Play应用程序的缓存,只有在这之后我才从Google Play获得了所有3个订阅。 - Artem_Iens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接