6

我已经在我的应用程序中使用计费服务实现了应用程序购买(托管),当用户想要购买物品时,他将做出购买请求,即使用户已经购买了该物品也需要互联网。所以为了方便用户,我正在这样做,如果用户已经购买了该项目,那么值将被保存在共享的前缀中。并且当用户点击该特定项目时,首先它将检查共享前缀。价值,无论用户是否已经购买物品,如果不是,则去购买请求,否则显示他/她的物品。 我的问题是,这是安全的方式?或者我还要做别的事情?Android应用程序内购买检查买家离线

回答

8

这并不安全。我会阻止你以这种方式实施这样的检查。你应该采用标准方法并使用getPurchases()方法。您可以随时(甚至离线)调用此方法,并且如果用户已购买,它们将从该方法返回。以下是一个示例代码:

IInAppBillingService service; // initialize it first 

Bundle response = service.getPurchases(3, "you app package", "inapp", null); 
int responseCode = response.getInt(KEY_RESPONSE_CODE); 
if (responseCode == RESPONSE_OK) { 
    ArrayList<String> purchases = response.getStringArrayList(KEY_INAPP_PURCHASE_ITEM_LIST); 
    ... 
} 

您需要验证购买是否签署了正确的证书并且购买状态未被取消。但是这比在共享属性中存储数据更安全。这种方法的另一个优点是,用户重新安装应用程序后,所有购买也将在那里自动提供。

+0

“您可以致电这种方法在任何时候(甚至是离线)“---它怎么会起作用? – Zotyi

1

该技术的完整示例在TrivialDrive示例应用程序中,它适用于我,但是我在考虑离线情况。 Google Play应用缓存了购买内容,并对getPurchases(3,“pkg”,“inapp”,null)进行了脱机响应,但这种方式无限期地运行或者存在类似于此缓存的超时时间...

+0

我试过使用ionic2 inapp插件。它脱机工作,但是当我重新启动设备时,它会发生连接错误!这意味着缓存有一些限制! –