Google Play应用内购买会返回错误代码-1008:null puchaseData或dataSignature

时间:2013-05-04 18:45:50

标签: android in-app-purchase google-play in-app-billing

我在v2中成功实现后试图实现Google Play in-app purchase v3。但是,每次尝试购买我真正的应用内商品时,都会收到以下后续错误:

IAB返回null purchaseData或dataSignature(响应-1008:未知错误)

这来自IabHelper.java class, line 452

if (purchaseData == null || dataSignature == null) {
    logError("BUG: either purchaseData or dataSignature is null.");
    logDebug("Extras: " + data.getExtras().toString());
    result = new IabResult(IABHELPER_UNKNOWN_ERROR, "IAB returned null purchaseData or dataSignature");
    if (mPurchaseListener != null) mPurchaseListener.onIabPurchaseFinished(result, null);
    return true;
}

我已经确认a)我的应用已签名,b)我的应用版本与Google Play商店中的草稿版本#匹配,以及c)尝试购买的用户已添加为测试用户。我已尝试过3个测试帐户和4个应用内购买订阅类型。

  • 我应该关注此错误代码吗?
  • 这个问题仅限于非生产版本吗?
  • 如果/当我发布此版本时,这会影响我的客户吗?
  • 您是否真的只能在实际使用IAB版本3进行实际发布后,端到端测试应用内购买?我意识到我可以使用android.test.purchased项类型,我有(它有效),但我不认为这是一个有效的端到端测试。

3 个答案:

答案 0 :(得分:66)

我自己有这个问题。过了一会儿,我发现了我做错了什么。我在IABHelper上调用了错误的方法。

如果您使用在Google Developer Console上注册为订阅的SKU致电mHelper.launchPurchaseFlow(...),则会导致错误: IAB返回null purchaseData或dataSignature(响应-1008:未知错误)。

如果您的SKU已注册为订阅,则必须使用以下方法:mHelper.launchSubscriptionPurchaseFlow(...)

希望这有帮助。

答案 1 :(得分:1)

  

错误购买:iabResult:IAB返回null购买数据或数据   签名(回复:-1008未知错误)

如果在使用launchPurchaseFlow()方法时出现上述错误并获得此错误,请检查您的产品类型。我是创建订阅但我需要托管产品,例如非消费品类型。我的意思是要小心购买或订阅

答案 2 :(得分:0)

对于Cordova和Hybrid应用,您需要使用this.iap.subscribe(this.productId)方法来订阅InAppPurchase

以下代码对我来说很好用:

 getProdutIAP() {
        this.navCtrl.push('subscribeDialogPage');
        this.iap
            .getProducts(['productID1']).then((products: any) => {
                this.buy(products);
                // alert('getProdutIAP' + JSON.stringify(products));
            })
            .catch((err) => {
                console.log(JSON.stringify(err));
                alert('Finished Purchase' + JSON.stringify(err));
                console.log(err);
            });
    }

    buy(products: any) {
        // this.getProdutIAP();
        // alert(products[0].productId);
        this.iap.subscribe(products[0].productId).then((buydata: any) => {
            alert('buy Purchase' + JSON.stringify(buydata));
            // this.sub();
        }).catch((err) => {
            // this.navCtrl.push('subscribeDialogPage');
            alert('buyError' + JSON.stringify(err));
        });
    }

    sub() {
        this.platform.ready().then(() => {
            this.iap
                .subscribe(this.productId)
                .then((data) => {
                    console.log('subscribe Purchase' + JSON.stringify(data));
                    alert('subscribe Purchase' + JSON.stringify(data));
                    this.getReceipt();
                }).catch((err) => {
                    this.getReceipt();
                    alert('subscribeError' + JSON.stringify(err));
                    console.log(err);
                });
        })
    }