2013-01-16 77 views
1

我正在使用Android Billing API V3從Play商店查詢購買信息。我想知道是否有可能清除本地緩存。清除Android結算本地緩存?

V3增加了賬單API的本地緩存功能,以減少網絡流量。我有一個每天運行的更新服務,它會更新我的元數據,並且由於我在應用程序中顯示成本,因此我希望刷新本地緩存並觸發更新,以防我已更新價格以確保顯示正確的價格。

文件說:

因爲谷歌遊戲客戶端現在本地緩存設備上的應用內結算的信息,您可以通過使用第3版API更頻繁地查詢這些信息,例如getPurchases調用。與以前版本的API不同,許多版本3 API調用將通過緩存查找服務,而不是通過網絡連接到Google Play,這顯着加快了API的響應時間。

回答

0

不幸的是,Google Play客戶端是應用程序執行緩存,並且沒有公開的API來清除緩存。

我看不出爲什麼要清除緩存? Google Play客戶端會收到有關更改的通知,因此會相應地使其緩存失效。假設返回的電話是正確的。

+0

鑑於沒有控制暴露的服務,我認爲你是對的,我只需要假設這個呼叫總是正確的。乾杯 – Syntax

+0

我設法刪除以前的購物,手動取消Google Checkout中的交易,然後2-清除Google Play商店的數據(而不是緩存)。 – n0rm1e

+0

我一直在嘗試使緩存無效,因爲應用內結算購買似乎不是即時跨設備同步的(我購買一臺,轉到其他設備,並且Google Play服務響應似乎被緩存,因爲該項是仍未購買)。我發現其他問題相關,如http://stackoverflow.com/questions/18306263/android-in-app-purchases-not-syncing-immediately-across-multiple-devices,但沒有找到任何正確的答案呢.. 。 – jrub

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(); 

參考:

How to Clear User Data in your Android Application programmatically

謝謝。

+0

感謝您的回覆,我很抱歉,我還沒有機會做任何事情。由於我的開發者帳戶存在配置問題,我在此任務上被阻止。我認爲計費API緩存不會在我的應用程序緩存下,因爲我認爲它會跨越所有應用程序,因爲它與遊戲結算API集成在一起(向我的應用程序範圍外運行的服務發射意圖) – Syntax

+0

實際上,Google Play可能會將每個應用的相關廣告資源條目緩存到應用自己的數據存儲中,這並不是一個可笑的建議。 –