kga*_*oid 3 android in-app-purchase in-app-subscription
我找不到通过谷歌测试InApp订阅测试产品ID的方法private final String productID = "android.test.purchased"; // Test Product ID by Google
在文档中,没有任何地方写入InAPP订阅无法使用测试产品进行测试,也没有在任何地方提及,如何测试InApp订阅.
我已按照文档(InAppV3)实现了我的代码.
医生说:
实施订阅:启动订阅的购买流程类似于启动产品的购买流程,但产品类型必须设置为"subs".购买结果将传递到您的Activity的onActivityResult方法,与应用内商品的情况完全相同.
我也正确地实施了这一点.
我的应用程序正在工作,如果我用"subs"替换"inapp",即它适用于产品而不是订阅.
当我将"inapp"更改为"subs"时,购买将返回:
09-24 14:01:12.943: I/(16929): isBillingSupported() - success : return 0
09-24 14:01:12.943: D/Finsky(2598): [281] InAppBillingUtils.getPreferredAccount: com.kgandroid.inappsubscriptiondemo: Account from first account - [MOn42QuZgF98vxJi0p3wAN3rfzQ]
09-24 14:01:12.943: I/(16929): getPurchases() - success return Bundle
09-24 14:01:12.943: I/(16929): getPurchases() - "RESPONSE_CODE" return 0
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_PURCHASE_ITEM_LIST" return []
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_PURCHASE_DATA_LIST" return []
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_DATA_SIGNATURE" return null
09-24 14:01:12.943: I/(16929): getPurchases() - "INAPP_CONTINUATION_TOKEN" return null
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,没有android.test.purchased返回的详细信息.测试inapp购买对话框也没有打开.
相关的购买代码(虽然它与我猜的问题无关):
void purchase()
{
if (!blnBind) return;
if (mService == null) return;
ArrayList<String> skuList = new ArrayList<String>();
skuList.add(productID);
Bundle querySkus = new Bundle();
querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
Bundle skuDetails;
try {
skuDetails = mService.getSkuDetails(3, getPackageName(), "subs", querySkus);
System.out.println(skuDetails);
Toast.makeText(context, "getSkuDetails() - success return Bundle", Toast.LENGTH_SHORT).show();
Log.i(tag, "getSkuDetails() - success return Bundle");
} catch (RemoteException e) {
e.printStackTrace();
Toast.makeText(context, "getSkuDetails() - fail!", Toast.LENGTH_SHORT).show();
Log.w(tag, "getSkuDetails() - fail!");
return;
}
int response = skuDetails.getInt("RESPONSE_CODE");
Toast.makeText(context, "getSkuDetails() - \"RESPONSE_CODE\" return " + String.valueOf(response), Toast.LENGTH_SHORT).show();
Log.i(tag, "getSkuDetails() - \"RESPONSE_CODE\" return " + String.valueOf(response));
if (response != 0) return;
ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");
Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\" return " + responseList.toString());
if (responseList.size() == 0) return;
for (String thisResponse : responseList) {
try {
JSONObject object = new JSONObject(thisResponse);
String sku = object.getString("productId");
String title = object.getString("title");
String price = object.getString("price");
Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\":\"productId\" return " + sku);
Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\":\"title\" return " + title);
Log.i(tag, "getSkuDetails() - \"DETAILS_LIST\":\"price\" return " + price);
if (!sku.equals(productID)) continue;
Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), sku, "subs", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
Toast.makeText(context, "getBuyIntent() - success return Bundle", Toast.LENGTH_SHORT).show();
Log.i(tag, "getBuyIntent() - success return Bundle");
response = buyIntentBundle.getInt("RESPONSE_CODE");
//Toast.makeText(context, "getBuyIntent() - \"RESPONSE_CODE\" return " + String.valueOf(response), Toast.LENGTH_SHORT).show();
Log.i(tag, "getBuyIntent() - \"RESPONSE_CODE\" return " + String.valueOf(response));
if (response != 0) continue;
PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), 0, 0, 0);
} catch (JSONException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
//Toast.makeText(context, "getSkuDetails() - fail!", Toast.LENGTH_SHORT).show();
Log.w(tag, "getBuyIntent() - fail!");
} catch (SendIntentException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
订阅是否支持测试购买?如果没有,如何测试订阅?如果是的话,为什么google会返回null?
任何相关的文档或链接也会有所帮助.
小智 7
我从未尝试使用测试产品ID("android.test.purchased")测试sub,我不确定它是否会起作用似乎是产品ID而不是订阅ID.我使用真实的订阅ID(我在Google Play开发者控制台上创建),但我使用的帐户不是我的开发者帐户(即您用来发布应用的帐户).
如果您转到https://play.google.com/apps/publish/,然后点击"设置",您会看到一个名为"具有测试访问权限的Gmail帐户"的字段.您可以为要测试购买的帐户键入一个或多个Gmail地址.任何在此处添加购买订阅的帐户都不会被收费,订阅将持续24小时.(来源:http://developer.android.com/google/play/billing/billing_testing.html和我自己的经验)
这对我行得通.虽然我似乎确实发现了一个错误:尝试取消Android测试订阅会给我一个500响应代码
祝你的应用好运!
编辑:
来自Google文档(http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-test)
您无法使用自己的开发者帐户来测试完整的应用内购买流程,因为Google付款不允许您自行购买商品.
您是否尝试过使用其他帐户?
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |