Android 无法测试应用内订阅

Android 无法测试应用内订阅,android,in-app-purchase,in-app-subscription,Android,In App Purchase,In App Subscription,我找不到一种方法来使用google的测试产品ID测试InApp订阅,即,private final String productID=“android.test.purchased”;//通过Google测试产品ID 在本文中,没有任何地方写过不能用测试产品测试InAPP订阅,也没有任何地方提到如何测试InAPP订阅 我已经实现了下面的代码(InAppV3) 医生说: 实施订阅: 为订阅启动购买流类似于为产品启动购买流,但产品类型必须设置为“subs”。购买结果将发送到活动的onActivity

我找不到一种方法来使用google的测试产品ID测试InApp订阅,即,
private final String productID=“android.test.purchased”;//通过Google测试产品ID

在本文中,没有任何地方写过不能用测试产品测试InAPP订阅,也没有任何地方提到如何测试InAPP订阅

我已经实现了下面的代码(InAppV3)

医生说:

实施订阅: 为订阅启动购买流类似于为产品启动购买流,但产品类型必须设置为“subs”。购买结果将发送到活动的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
正如您所见,
android.test.purchased
的详细信息正在返回。app purchased对话框中的test也未打开

相关购买代码
(尽管我猜与问题无关):

作废采购()
{
如果(!blnBind)返回;
if(mService==null)返回;
ArrayList skuList=新的ArrayList();
skuList.add(productID);
Bundle querySkus=新Bundle();
querySkus.putStringArrayList(“项目ID列表”,skuList);
详细信息;
试一试{
skuDetails=mService.getSkuDetails(3,getPackageName(),“subs”,querySkus);
系统输出打印项次(SKU详细信息);
Toast.makeText(上下文,“getSkuDetails()-success return Bundle”,Toast.LENGTH_SHORT.show();
i(标记“getSkuDetails()-success return Bundle”);
}捕获(远程异常){
e、 printStackTrace();
Toast.makeText(上下文,“getSkuDetails()-fail!”,Toast.LENGTH\u SHORT.show();
w(标记“getSkuDetails()-fail!”);
返回;
}
int response=skuDetails.getInt(“response_CODE”);
Toast.makeText(上下文,“getSkuDetails()-\”响应\代码\“return”+String.valueOf(响应),Toast.LENGTH\u SHORT.show();
Log.i(标记“getSkuDetails()-\”响应\代码\“return”+字符串.valueOf(响应));
如果(响应!=0)返回;
ArrayList responseList=skuDetails.getStringArrayList(“详细信息列表”);
Log.i(标记“getSkuDetails()-\”详细信息列表\“return”+responseList.toString());
if(responseList.size()=0)返回;
for(字符串thisResponse:responseList){
试一试{
JSONObject对象=新的JSONObject(此响应);
String sku=object.getString(“productId”);
String title=object.getString(“title”);
String price=object.getString(“price”);
Log.i(标记“getSkuDetails()-\“DETAILS\u LIST\”:\“productId\”return“+sku);
Log.i(标记“getSkuDetails()-\”详细信息列表\“:\”标题\“返回”+标题);
Log.i(标记“getSkuDetails()-\”详细信息列表\“:\”价格\“退货”+价格);
如果(!sku.equals(productID))继续;
Bundle-buyententbundle=mService.getbuyentent(3,getPackageName(),sku,“subs”,“bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ”);
Toast.makeText(上下文,“getBuyIntent()-success return Bundle”,Toast.LENGTH_SHORT.show();
i(标记“getBuyIntent()-successreturnbundle”);
response=buyententbundle.getInt(“响应代码”);
//Toast.makeText(上下文,“getBuyIntent()-\”响应\代码\“return”+String.valueOf(响应),Toast.LENGTH\u SHORT.show();
Log.i(标记“getBuyIntent()-\”响应\代码\“return”+字符串.valueOf(响应));
如果(响应!=0)继续;
PendingIntent PendingIntent=buyIntentBundle.getParcelable(“购买意向”);
startinentsenderforresult(pendingent.getIntentSender(),1001,newintent(),0,0,0);
}捕获(JSONException e){
e、 printStackTrace();
}捕获(远程异常){
e、 printStackTrace();
//Toast.makeText(上下文,“getSkuDetails()-fail!”,Toast.LENGTH\u SHORT.show();
w(标记“getBuyIntent()-fail!”);
}捕获(发送){
e、 printStackTrace();
}
} 
}
订阅是否支持测试购买?? 如果没有,如何测试订阅?? 如果是,为什么谷歌返回空值??


任何相关的文档或链接都会很有帮助。

我从未尝试过使用测试产品ID(“android.Test.purchased”)测试SUB,我不确定它是否有效,因为它似乎是一个产品ID而不是订阅ID。我使用的是真实的订阅ID(我在Google Play开发者控制台上创建的),但我使用的帐户不是我的开发者帐户(即,你用来发布应用程序的帐户)

如果你进入,然后点击设置,你会看到一个叫做“Gmail帐户测试访问”的字段。你可以输入一个或多个帐户的gmail地址来测试你的购买。在那里添加的任何购买订阅的帐户将不收费,订阅将持续24小时。(来源:和我自己的经验)

这对我很有用。虽然我确实发现了一个bug:

祝你的应用程序好运

编辑:

来自谷歌文档()

您无法使用开发人员帐户测试完整的应用内测试 购买过程,因为谷歌支付不允许您购买物品 来自你自己


您尝试过使用其他帐户吗?

不,不支持。您需要创建一个beta版本并作为beta用户对其进行测试。支持Alpha版本???我通过在Alpha版本的deveper控制台中添加两个订阅产品来测试它。但是
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();
        }
    } 
}