我已经在我的应用程序中使用计费服务实施应用程序购买(托管),当用户想要购买物品时,即使用户已经购买了物品,他也会提出需要互联网的购买请求。所以为了方便用户,我这样做,如果用户购买了该项目,那么一个值将保存在共享的首选项中。当用户点击该特定项目时,它将首先检查共享的首选项。用户已购买物品的价值,如果没有,则转到购买请求,否则显示他/她的物品。 我的问题是,这是安全的方式吗?或者我必须做点什么?
答案 0 :(得分: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);
...
}
诅咒你需要验证购买是否使用正确的证书进行签名,并且购买状态不会被取消。但这比在共享属性中存储数据要安全得多。这种方法的另一个优点是,在用户重新安装应用程序后,所有购买都将在那里自动提供。
答案 1 :(得分:1)
这项技术的完整示例在TrivialDrive示例应用程序中,它对我有用,但我正在思考离线情况。 Google Play应用程序缓存购买并对getPurchases(3,&#34; pkg&#34;,&#34; inapp&#34;,null)进行离线响应,但这是无效的,或者此缓存超时......