好吧,我几乎已经完成了Cordova应用程序内购买,以使其在Windows沙箱模式下可以正常工作。我经历了this线程并尝试了所有可能的方法来实现它,但是我做不到。按照说明,我已将in-app-purchase.xml
放置在www
文件夹中。代码如下。
store.verbosity = store.QUIET;
store.sandbox=true;
store.register({
id: productId,
type: store.PAID_SUBSCRIPTION
});
// Listen to the 'updated' event for individual product
store.when(productId).updated(function (p) {
$ionicLoading.hide();
});
// Initiate a purchase
store.order(productId);
// When the purchase is approved, show an alert
store.when(productId).approved(function (order) {
Store.subscribeWindows(month, order);
order.finish();
});
// When the purchase is approved, show an alert
store.when(productId).cancelled(function (order) {
$ionicPopup.alert({
title: 'Subscribe was cancelled!',
template: 'Try again!'
});
order.finish();
});
// When the store is ready all products are loaded and in their "final" state.
store.ready(function () {
console.log("The store is ready");
});
// Deal with errors:
store.error(function (err) {
$ionicLoading.hide();
$ionicPopup.alert({
title: 'Something went wrong',
template: err.message
});
})
// This will contact the server to check all registered products validity and ownership status.
// It's mostly fine to do this only at application startup but you can refresh it more often.
store.refresh();
}
in-app-purchase.xml
<?xml version="1.0" encoding="utf-8" ?>
<CurrentApp>
<ListingInformation>
<App>
<AppId>CN=CB5BB00C-6A35-44A7-B46E-013721E959BD</AppId>
<LinkUri>https://www.microsoft.com/store/apps/9nblggh3tvsk</LinkUri>
<CurrentMarket>en-us</CurrentMarket>
<AgeRating>12</AgeRating>
<MarketData xml:lang="en-us">
<Name>App Name</Name>
<Description>App Description</Description>
<Price>0</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</App>
<Product ProductId="com.product.premium365" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>com.product.premium365</Name>
<Price>59.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</Product>
<Product ProductId="Product03" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>Product03</Name>
<Price>14.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
xmlfile.xml
</MarketData>
</Product>
<Product ProductId="com.product.premium6" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>com.product.premium6</Name>
<Price>29.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</Product>
<Product ProductId="com.product.premium" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>com.product.premium</Name>
<Price>4.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</Product>
</ListingInformation>
<LicenseInformation>
<App>
<IsActive>true</IsActive>
<IsTrial>false</IsTrial>
</App>
<!-- Setting a prepurchased durable -->
<Product ProductId="com.product.premium365">
<IsActive>true</IsActive>
</Product>
</LicenseInformation>
</CurrentApp>
下面的屏幕截图是我的噩梦-错误。
我尝试过
store.inappbilling.setTestMode();
,但它记录了错误Object doesn't support property or method 'setTestMode'
使用的资源
我也尝试过dkarzon叉,这对我也不起作用。
I'm about to reach the dead end of the tasks. Pl. someone helps me out. It' vital.
更新-> 1
按照 dkarzon的指令,我已使用主存储库中的库,并使用回调注册了
store.inappbilling.setTestMode()
,它触发了失败回调。当我用arg声明函数error call back时,它给出了missing command error
错误。 Pl。请注意,我是直接测试应用程序,而不是从商店中测试。这是我曾经做过的code snippet。现在,它会跳过沙盒模式,并直接在生产中直接显示带有所选add-ons
的Windows购买对话框。更新-> 2
我调试并发现
folder.getFileAsync("in-app-purchase.xml")
无法执行,最初返回的错误是Input data not in expected format
,然后按照WindowsStoreProxy.xml的结构编辑了文件,现在给出了错误The parameter is incorrect
。Here is my updated XML
<?xml version="1.0" encoding="utf-16" ?>
<CurrentApp>
<ListingInformation>
<App>
<AppId>CN=CB5BB00C-6A35-44A7-B46E-013721E959BD</AppId>
<LinkUri>https://www.microsoft.com/store/apps/9nblggh3tvsk</LinkUri>
<CurrentMarket>en-us</CurrentMarket>
<AgeRating>12</AgeRating>
<MarketData xml:lang="en-us">
<Name>App Name</Name>
<Description>App Decription</Description>
<Price>0.00</Price>
<CurrencySymbol>$</CurrencySymbol>
</MarketData>
</App>
<Product ProductId="com.product.premium" LicenseDuration="10" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>com.product.premium</Name>
<Price>4.99</Price>
<CurrencySymbol>$</CurrencySymbol>
</MarketData>
</Product>
<Product ProductId="Product03" LicenseDuration="0" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>Product03</Name>
<Price>14.99</Price>
<CurrencySymbol>$</CurrencySymbol>
</MarketData>
</Product>
</ListingInformation>
<LicenseInformation>
<App>
<IsActive>true</IsActive>
<IsTrial>false</IsTrial>
</App>
<Product ProductId="com.product.premium">
<IsActive>true</IsActive>
<ExpirationDate>2018-01-19T00:00:00.00Z</ExpirationDate>
</Product>
</LicenseInformation>
</CurrentApp>
更新-> 3
我的不好,经过深入调试,我发现我使用XML而不是
AppId
给出了Package Identity,这导致了问题,而this也帮助了我。使用Windows.ApplicationModel.Store.CurrentApp.AppId
生成的应用程序ID,因此我可以看到购买模拟弹出窗口。所有的错误代码都触发了回调,但是当我选择S_OK
时,它什么也不返回。我经历了这个SO post,但是不幸的是,它没有用。Updated XML
<?xml version="1.0" encoding="utf-16" ?>
<CurrentApp>
<ListingInformation>
<App>
<AppId>fb9ec87b-54b-46f-b1e6-87d857dfa730</AppId>
<LinkUri>http://apps.windows.microsoft.com/app/988b90e4-5d4d-4dea-99d0-e423e414fbc</LinkUri>
<CurrentMarket>en-us</CurrentMarket>
<AgeRating>12</AgeRating>
<MarketData xml:lang="en-us">
<Name>App Name</Name>
<Description>App Description</Description>
<Price>0.00</Price>
<CurrencySymbol>$</CurrencySymbol>
</MarketData>
</App>
<Product ProductId="com.product.premium" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>com.product.premium</Name>
<Price>4.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</Product>
<Product ProductId="Product03" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>Product03</Name>
<Price>14.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</Product>
<Product ProductId="com.product.premium6" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>com.product.premium6</Name>
<Price>29.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</Product>
<Product ProductId="com.product.premium365" ProductType="Durable">
<MarketData xml:lang="en-us">
<Name>com.product.premium365</Name>
<Price>59.99</Price>
<CurrencySymbol>$</CurrencySymbol>
<CurrencyCode>USD</CurrencyCode>
</MarketData>
</Product>
</ListingInformation>
<LicenseInformation>
<App>
<IsActive>true</IsActive>
<IsTrial>false</IsTrial>
</App>
</LicenseInformation>
</CurrentApp>
最佳答案
最后,现在一切正常,现在我收到了approved
回调。感谢所有人的支持,特别是对@dkarzon忙于黑白忙碌的人。
我也将其中一种产品添加为LicenseInformation
标签下的事件产品。 更新-> 3 在查询中还有另一步摆脱此类问题,请参见如果将来遇到任何使Windows沙箱模式工作的困难时,请作为引用。
<LicenseInformation>
<App>
<IsActive>true</IsActive>
<IsTrial>false</IsTrial>
</App>
<Product ProductId="com.animecrave.premium">
<IsActive>true</IsActive>
</Product>
</LicenseInformation>
References
关于cordova - J3k0 cordova-plugin-purchase沙盒模式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44100306/