我和其他许多人一样,只是在验证静态响应是否有效后,尝试测试我的应用内购买情况。但是当我阅读文档,帖子和答案时,似乎没有任何结果。而且我非常沮丧。
我的最终目标是找出我是否可以在不收费的情况下进行测试。
这个文件说我可以 - link
获得测试访问权限后,这些用户可以侧载您的应用并测试您产品的完整商品推销,购买和实现流程。测试购买是真实订单,Google Play以与其他订单相同的方式处理它们。购买完成后, Google Play会阻止订单进行财务处理,确保用户帐户无实际费用,并在14天后自动取消已完成的订单。
和相同的链接
在测试购买过程中,用户可以测试应用中的实际商品推销,购买和实现流程。在购买过程中,inapp项目显示为具有实际价格的普通项目。但是, Google Play通过购买对话框中心的通知标记测试购买,以便于识别
但是在这个页面上,它说 - link
WTF ......所以有人都知道吗?可以不收费进行测试吗?如果是这样,怎么样?使用测试人员帐户登录测试设备。通过购买一些项目来测试您的应用内结算应用,并修复您遇到的任何问题。 如果您不希望实际向您的测试人员收费,请务必退还购买的商品!
答案 0 :(得分:2)
如果您使用In App Billing版本3,那么您只需使用 product id =“android.test.purchased”即可。它是虚拟产品,您不应该在开发人员控制台中添加它。你可以不收取任何费用购买该产品。
<强> android.test.purchased 强>
当您使用此产品ID制作应用内结算请求时,Google Play会像您成功购买商品一样进行回复。响应包括JSON字符串,其中包含虚假购买信息(例如,虚假订单ID)。在某些情况下,JSON字符串已签名,响应中包含签名,因此您可以使用这些响应测试签名验证实现。
希望它会对你有所帮助。
答案 1 :(得分:2)
是:您可以为您在控制台中实际定义的实际商品(SKU)进行测试购买,不涉及任何付款。我自己刚刚成功完成了这项工作。
与目前接受的答案中给出的建议相反,没有需要像使用静态测试那样使用虚拟SKU android.test.purchased
。
OP引用了这一段:
在测试购买过程中,用户可以测试应用中的实际商品推销,购买和实现流程。在购买过程中,inapp项目显示为具有实际价格的普通项目。但是,Google Play会在购买对话框中心附加通知标记测试购买,以便于识别
到目前为止,这是正确的,并且与我能够实现的目标一致。
但OP的后续段落引用了:
使用测试人员帐户登录测试设备。通过购买一些项目来测试您的应用内结算应用,并修复您遇到的任何问题。如果您不希望实际向您的测试人员收费,请务必退还购买款项!
就我而言(特别是最后一句),这是不正确的。
你可以做的是按照第一段。也就是说,只要测试帐户作为测试人员添加到控制台,那么当尝试进行购买时,对话框(显示价格等)也应该在其中心有一个特殊的字符串(如第一段所述)陈述&#34;这是一个测试订单,不会向您收取费用#34;。
但是,为了实际完成这项工作,实际的APK还需要测试人员(或测试设备)使用的是上传到Alpha通道的那个。
所以,我采取的步骤如下:
为Alpha通道测试创建一个单独的Google群组。
将您的IAP测试用户gmail帐户添加到该组。
使用应用内购买代码上传APK(使用发布证书导出和签名)到Alpha通道。
等待一两个小时以使alpha版本生效。
与此同时,设置一个单独的测试设备,只需设置测试gmail帐户。
在以测试用户身份登录时,通过导航到测试设备上的选择加入URL来选择进行Alpha通道测试。
使用该测试人员帐户登录并从Play安装该应用程序。此时(或一两个小时后),您上传的最新alpha应该是现在安装的。
尝试购买。当对话框出现价格时,它应该有一个额外的&#34;这是一个测试订单,你不会被收取费用#34;横跨它的字符串。
事实上,为了完全准确,测试设备似乎不一定需要从Play安装alpha APK。根据我的测试, 重要的是,您确实将APK上传为alpha,并且您在测试设备上运行的APK具有相同的版本号。此外,测试用户需要选择加入alpha版本,并在控制台中添加为测试人员(如上所述)。我刚刚导出了我的APK的另一个调整版本,并使用adb install
加载到我的测试设备中,我仍然可以尝试购买真正的SKU&#34; ...您将不会被收取费用#34;消息。
答案 2 :(得分:0)
您必须消费一旦购买。
consume.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
String purchaseToken = "inapp:" + getPackageName() + ":android.test.purchased";
try {
Log.d("","Running");
int response = mService.consumePurchase(3, getPackageName(), purchaseToken);
if(response==0)
{
Log.d("Consumed","Consumed");
}else {
Log.d("","No"+response);
}
}catch (RemoteException e)
{
Log.d("Errorr",""+e);
}
}
});
t.start();
}
});