我正在使用 Capacitor(但不是 Ionic)来打包适用于 iOS 的 SvelteKit 应用程序,并尝试让应用内购买正常工作。
Capacitor 的应用内购买页面出人意料地毫无帮助。我已尽力而为:
我在 appstoreconnect 中设置了产品,它们的状态是“准备提交”
我已经安装了
cordova-plugin-purchase
并运行npx cap update
和npx cap sync
并且正在安装
[info] 找到 1 个适用于 ios 的 Cordova 插件: [电子邮件受保护]
import 'cordova-plugin-purchase'; // This seems to add `CdvPurchase` to the global scope.
function buy() {
const {store, ProductType, Platform} = CdvPurchase;
store.verbosity = store.DEBUG;
store.register([{
type: ProductType.CONSUMABLE,
id: "my-product-id",
platform: Platform.APPLE_APPSTORE,
}]);
store.error(e => {
console.log('error', e);
});
store.when()
.productUpdated(() => {
console.log('product updated', product);
})
.approved(value => {
console.log('approved', value);
})
.verified(value => {
console.log('verified', value);
})
.finished(value => {
console.log('finished', value);
});
store.ready(() => {
console.log('ready', store.products);
store.order('my-product-id');
});
store.initialize(Platform.APPLE_APPSTORE)
.then(() => {
console.log('initialize resolved', store.products);
store.order('my-product-id');
});
}
但是我运行
buy
函数,我得到的是:
[日志] - [CordovaPurchase] 信息:初始化()
store
永远不会报告准备就绪。没有一个监听器被触发,甚至.error()
也没有。
我错过了什么吗?我该如何调试这个?
设备准备就绪后,您需要设置并初始化商店。
您不能
buy()
产品然后初始化商店;它必须在设备启动时完成。
例如,在科尔多瓦,这是
onDeviceReady
事件 (example)。
对于 Capacitor,如果您使用 Ionic + Angular,则可以使用
this.platform.ready()
事件。
对于 React、Vue 等框架,可以使用:
document.addEventListener("deviceready", function(){
//do something when device is ready
}, false);
尝试以这种方式导入cordova-plugin-purchase:
import "cordova-plugin-purchase/www/store.js";
还可以尝试使用“window”作为全局变量,以防正常方式不起作用:
const { store, ProductType, Platform } = window.CdvPurchase;
以下是其他有用的链接,您可以在其中找到订阅基本代码的代码:
我过去发现这个资源很有用,所以我想你也可能有用。
我正在努力添加 cordova-plugin-purchase (v13)。这是我使用的代码:
const initializeIAP = () => {
const { store, ProductType, Platform, logLevel } = CdvPurchase;
const idProduct = "MyPRODUCTID";
store.verbosity = 4;
store.initialize([Platform.APPLE_APPSTORE]);
store.register([
{
id: idProduct,
type: ProductType.PAID_SUBSCRIPTION,
platform: Platform.APPLE_APPSTORE,
},
]);
const myProduct = store.get("MMmonthly", Platform.APPLE_APPSTORE);
console.log(myProduct);
};
document.addEventListener("deviceready", initializeIAP);
不幸的是,我的产品值返回了未定义的值。 我在 Apple Store Connect 中设置了 IAP 订阅(并且我在代码中使用相同的 idProduct),我在 iOS 模拟器上作为沙盒用户进行连接...
我错过了什么?
感谢您提前的帮助