Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否缓存应用内购买或检查Android应用上的每次启动?_Android_In App Purchase_In App Billing - Fatal编程技术网

是否缓存应用内购买或检查Android应用上的每次启动?

是否缓存应用内购买或检查Android应用上的每次启动?,android,in-app-purchase,in-app-billing,Android,In App Purchase,In App Billing,我的应用程序有一些应用程序内购买,每个都解锁了应用程序的某些部分 哪种方式是在应用程序中实际拥有购买状态的最佳方式,但方式正确: 在实际购买后或恢复购买时,将购买内容存储在SharedReferences上,并在应用程序启动时读取。这可能会产生问题:在退款的情况下,应用程序将继续具有这些值。根用户可以编辑xml并添加购买,就像购买一样 在应用程序启动时执行aqueryInventoryAsync,并将结果存储为SharedReference,以备将来在应用程序中使用。在没有网络的情况下,这将允许

我的应用程序有一些应用程序内购买,每个都解锁了应用程序的某些部分

哪种方式是在应用程序中实际拥有购买状态的最佳方式,但方式正确:

  • 在实际购买后或恢复购买时,将购买内容存储在
    SharedReferences
    上,并在应用程序启动时读取。这可能会产生问题:在退款的情况下,应用程序将继续具有这些值。根用户可以编辑xml并添加购买,就像购买一样

  • 在应用程序启动时执行a
    queryInventoryAsync
    ,并将结果存储为SharedReference,以备将来在应用程序中使用。在没有网络的情况下,这将允许使用先前
    queryInventoryAsync
    结果中的SharedReference值

  • 因为Google Play客户端现在可以缓存应用程序内的计费信息 在本地设备上,您可以使用版本3 API查询此信息 更频繁地获取信息,例如通过getPurchases调用。 与以前版本的API不同,许多版本3 API调用 将通过缓存查找而不是通过网络提供服务 连接到Google Play,这大大加快了API的运行速度 响应时间


    那怎么办呢?如果每个应用程序启动时都应该使用缓存结果,那么
    queryInventoryAsync
    是否会产生任何问题

    在我所有的游戏中,每次启动应用程序时,我都会使用
    queryInventoryAsync
    ,到目前为止,还没有出现任何问题(2万用户)。

    谢谢。如果
    queryInventoryAsync
    失败,是否也存储结果?不,如果失败,我不存储结果。我也不单独存储结果。但我注意到的一件事是,用户经常抱怨应用升级后,应用无法识别以前的应用内购买。因此,我怀疑在升级过程中缓存被清除,如果应用程序无法及时查询谷歌的服务器,那么应用程序可能会暂时显示未进行购买。