Tag: android billing

Android应用内结算:由于launchPurchaseFlow正在进行,因此无法启动launchPurchaseFlow

我正在首次实施“应用内结算”,并使用静态SKU IDtesting我的第一笔交易。 它第一次运行得非常好。 我打电话给mHelper.launchPurchaseFlow(…)并完成了testing购买。 我的活动收到onActivityResultcallback,并确保使用mHelper.handleActivityResult(…)处理它。 一切都很好。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Pass on the activity result to the helper for handling log("onActivityResult"); if (!this.mHelper.handleActivityResult(requestCode, resultCode, data)) { log("cleared the launch flow"); // not handled, so handle it ourselves (here's where you'd // perform any handling of activity results not […]

从Fragment调用startIntentSenderForResult(Android Billing v3)

新的Android Billing v3文档和帮助程序代码在启动购买stream程时使用startIntentSenderForResult() 。 我想从Fragment开始购买stream程(并接收结果)。 例如文档build议调用 startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); 和帮手代码调用 mHelper.launchPurchaseFlow(this, SKU_GAS, 10001, mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ"); 它调用startIntentSenderForResult() 。 问题是,调用startIntentSenderForResult()会导致onActivityResult()在父Activity上调用,而不是从IabHelper所在的Fragment调用。 我可以在父Activity接收onActivityResult() ,然后手动调用Fragment上的onActivityResult() ,但有没有办法从Fragment调用startIntentSenderForResult() ,直接返回Fragment的onActivityResult() ?

使用多个帐户的应用内购买

我在应用程序购买/订阅中遇到问题: 如果设备上有多个帐户,我无法获得用第二个帐户进行的购买交易。 有时这可以通过从Google Playnetworking界面安装应用程序暂时修复,但过了一段时间,购买将不会出现在查询中,迫使用户重新安装。 我正在使用这个示例中的IabHelper类。 做一些谷歌search,我发现这个错误存在一段时间,但不幸的是,我不能找出错误是在IabHelper类还是在谷歌方面。 我想提请大家注意Google,所以他们会在IabHelper课程或Play服务中提供一个适当的解决方法,或提供信息,如何处理。 我正在使用一个应用程序中的代码(写作的时候)900.000活跃的用户安装,我必须触发相当多的退款,因此。 如果有这个问题,我错过了,请让我知道。 编辑:有时,即使手机上只有一个帐户,也无法检索购买。

Android应用内结算:无法启动asynchronous操作,因为另一个asynchronous操作(正在进行)

我正在使用IabHelper实用程序类,正如Google的教程所推荐的那样,我正在受到这个错误的严重打击。 显然, IabHelper不能同时运行多个asynchronous操作。 我甚至设法在库存盘点仍在进行时尝试开始采购。 我已经尝试在我的主类中实现onActivityResult ,正如这里所build议的那样,但是在错误发生之前,我甚至都没有调用该方法。 然后我发现这个,但我不知道在哪里可以find这个flagEndAsync方法 – 它不在IabHelper类中。 现在我正在寻找一个方法来解决这个问题(不用重新实现整个She-Bang)。 我能想到的唯一解决scheme是创build一个boolean字段asyncActive ,在asynchronous任务启动之前检查,如果有另一个任务处于活动状态,则不执行此操作。 但是还有其他许多问题,并且不能跨活动。 此外,我宁愿有一个asynchronous任务队列,并尽快运行,而不是根本不运行。 任何解决这个问题?

为什么使用应用内结算来设置开发人员有效负载很重要?

我正在使用应用内结算API的版本3。 我有一个单独的,pipe理的,非消耗品。 我还没有在应用中发布这个function,所以我想在购买之前决定购买有效载荷的内容。 从“安全最佳实践” : 进行购买请求时设置开发人员负载string 使用应用内结算版本3 API时,您可以在向Google Play发送购买请求时添加“开发者有效负载”string标记。 通常,这用于传递唯一标识此购买请求的string标记。 如果您指定string值,则Google Play会将此string与购买回复一起返回。 随后,当您对此购买进行查询时,Google Play会将此string与购买详细信息一起返回。 您应该传入一个string标记,以帮助您的应用程序标识进行购买的用户,以便您稍后可以validation该用户是否合法购买。 对于消耗品,您可以使用随机生成的string,但对于非消耗品,您应该使用唯一标识用户的string。 当您收回Google Play的响应时,请确保validation开发者有效负载string与之前通过购买请求发送的令牌相匹配。 作为进一步的安全防范措施,您应该在您自己的安全服务器上执行validation。 无论对错,我都决定不采取build立服务器进行购买validation的“进一步安全防范”。 而且我不存储我自己的购买logging – 我总是调用计费API。 那么真的有什么理由要做这个有效载荷validation吗? validationAPI本身在报告购买物品之前肯定会validation用户的身份,并且如果攻击者已经泄露了设备(应用程序或Google Play API),我认为没有任何好处用户在设备上可以很容易地避开的标识。 还是有理由这样做,我没有想到?