关于这个问题有很多线索,我认为我理解这个问题,但目前我无法通过实际购买进行测试,因为我目前没有有效的信用卡,谷歌接受了,只有Maestro,不被接受。这就是我寻求帮助的原因(不是购买验证,而是验证我的思维过程是好的)。
首先,问题来自新的verifyPurchase
方法。新方法检查签名,这应该没问题。但是,Google不会为测试ID提供任何签名,例如android.test.purchased
。这导致下面的方法总是失败,并且在验证时总是返回false,即使假购买已经完成,并且我有一个确认对话框,购买确实是成功的。方法:
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature) {
//if(BuildConfig.DEBUG) return true;
if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
问题来自TextUtils.isEmpty()
检查,因为签名将为空,代码将返回false。我的临时测试解决方法是在代码中,注释掉了。如果我在测试方法的开头添加if(BuildConfig.DEBUG) return true;
,一切正常,用户可以启动并运行高级功能,所以问题确实与签名有关。
另一个问题是,如果我购买android.test.purchased
,我无法查询用户的广告资源,因此我无法确定,检查用户是否已购买高级功能的检查程序方法有效。< / p>
我的两个问题:
如果我从if(BuildConfig.DEBUG) return true;
删除了verifyPurchase
行,并将android.test.purchased
ID替换为我提供的真实SKU的真实ID,我是否可以确定所有内容都能正常运行我的情况?我再说一遍,增加的调试功能一切正常。如果您需要查看更多代码,请告诉我们!
下面的方法检查用户是否购买了高级功能,如果他/她有,则设置相应的首选项,否则,如果有任何东西向南,它会保留原样。这种方法是否正确?我在Application
课程中,在每个应用程序启动时都这样做,以防止修补。
private void checkPremium()
{
//get the helper up and running
final IabHelper helper=new IabHelper(INSTANCE, getBase64Key());
helper.startSetup(new IabHelper.OnIabSetupFinishedListener()
{
@Override
public void onIabSetupFinished(IabResult result)
{
//if the helper is in a correct state, check the inventory
if(result.isSuccess())
{
helper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener()
{
@Override
public void onQueryInventoryFinished(IabResult result, Inventory inv)
{
//if the inventory is reachable, check if we got the premium
if(result.isSuccess())
{
setPremium(inv.hasPurchase(ActWidgetSearch.SKU));
}
}
});
}
}
});
}
提前致谢!
答案 0 :(得分:4)
我几天前遇到了和你一样的问题。对于那些从Google Play下载实时应用程序的用户,如果测试ID(“android.test.purchased”)按照您的说法运行,他们就可以购买您的应用内购买。 Google Play将其视为“真实购买”,并且与您的个人SKU通过相同的渠道。见下文:
测试购买(应用内结算沙盒)
获得测试访问权限后,这些用户可以侧载您的应用并测试您产品的完整商品推销,购买和实现流程。测试购买是真实订单,Google Play以与其他订单相同的方式处理它们。购买完成后,Google Play会阻止订单进行财务处理,确保用户帐户无实际费用,并在14天后自动取消已完成的订单。
http://developer.android.com/google/play/billing/billing_testing.html#test-purchases
我现在只测试了自己的个人SKU,我可以说他们正在工作! (我在Google Merchant帐户中看到了该订单)。所以出去那里,赚点钱:))
另一方面,开发人员向开发人员...您可以向我展示有关如何在Application类中运行我的购买验证的教程的任何示例或链接吗?我认为这是一个我绝对想偷你的想法。干杯!
答案 1 :(得分:2)
确保您使用手机上的合适用户登录,或者在开发者控制台中将您的手机的Google帐户添加为测试用户。
http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static:
在某些情况下,保留的项目可能会返回签名的静态响应,这使您可以在应用程序中测试签名验证。如果运行应用程序的用户具有开发人员或测试帐户,则保留项仅返回已签名的响应。