cordova - J3k0 cordova-plugin-purchase沙盒模式不起作用?

标签 cordova in-app-purchase

好吧,我几乎已经完成了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>

下面的屏幕截图是我的噩梦-错误。

enter image description here

我尝试过store.inappbilling.setTestMode();,但它记录了错误
Object doesn't support property or method 'setTestMode'

使用的资源
  • In-app-purchase plugin(从J3k0派生的rafaellop repo 中)
  • Windows边缘模拟器,用于测试

  • 我也尝试过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

    enter image description here

    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,但是不幸的是,它没有用。

    enter image description here

    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


  • How to Implement In-App Purchases in Windows 10 Apps?
  • UWP: Cannot access LicenseInformation
  • https://github.com/Microsoft/Windows-universal-samples/blob/win10-1507/Samples/Store/shared/data/expiring-product.xml
  • https://docs.microsoft.com/de-de/windows/uwp/monetize/in-app-purchases-and-trials-using-the-windows-applicationmodel-store-namespace#proxy
  • https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.store.currentapp
  • http://www.wadewegner.com/2012/09/getting-the-application-id-and-hardware-id-in-windows-store-applications/
  • 关于cordova - J3k0 cordova-plugin-purchase沙盒模式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44100306/

    相关文章:

    ios - 我应该为每个要上传到 iTunesConnect 的新版本创建一个新的应用程序内购买吗?

    objective-c - 解锁应用内购买的指南/建议

    ios - iOS如何支持IAP订阅免费试用?

    java - 服务器端通知Phonegap反向ajax

    javascript - 在设备上测试时未定义 Cordova 插件

    javascript - isCustomResponse() API - 是否可用 MFPF8

    javascript - 我可以在非 iOS 设备上的 Cordova 应用程序中使用 Apple CloudKit JS 吗?

    android - phonegap HTML5 地理定位

    ios - 将付费应用更改为免费,但了解用户之前是否购买过

    ios - 应用内购买订阅