如何解决iOS 上的cordova-plugin-purchase:order() 在没有先卸载应用程序的情况下不起作用
我们正在开发一个应用程序,该应用程序使用 Ionic (Angular) 和 Capacitor 以及 cordova-plugin-purchase 来提供订阅(每月和每年)。购买在 Android 上完美运行。然而,在 iOS 上,虽然第一次购买工作正常,但购买到期后(通过取消订阅,因为它实际上是自动续订的)并且用户再次购买任何产品(现在处于 valid
状态,因为它已经过期) ,调用 order()
函数没有任何作用。产品状态仍为 valid
,JavaScript 控制台和 Xcode 中均未写入任何日志。也没有错误。我们已经验证我们的验证服务器正在返回正确的响应。但是,当我们卸载应用程序并再次从 Xcode 安装它时,购买再次开始工作,并且调用 order()
函数确实再次显示购买对话框,并且一切按预期进行。直到订阅到期并且他们再次尝试购买。
但是,如果产品尚未过期,并且用户尝试通过订阅其他订阅类型来更改订阅,则调用 order()
函数会按预期工作。只有当订阅到期时,它才开始不起作用,直到应用程序被删除/卸载然后再次安装。
我们使用非常标准的代码来实现购买——我们尝试了尽可能少的简单化。
初始化:
this.store.validator = 'https://xxxxxxx/api/app/purchased';
this.store.register([
{
type: this.store.PAID_SUBSCRIPTION,id: this.YEARLY_SUBSCRIPTION
},{
type: this.store.PAID_SUBSCRIPTION,id: this.MONTHLY_SUBSCRIPTION
}
]);
this.subscriptions.add(
this.status.userData.subscribe(ud => {
this.user = ud;
this.store.applicationUsername = ud.id.toString(10);
})
);
this.store.when(this.YEARLY_SUBSCRIPTION)
.cancelled(this.purchaseCancelled)
.updated(this.purchaseYearlyUpdated)
.approved(this.purchaseApproved)
.verified(this.purchaseVerified)
.owned(this.purchaseOwned);
this.store.when(this.MONTHLY_SUBSCRIPTION)
.cancelled(this.purchaseCancelled)
.updated(this.purchaseMonthlyUpdated)
.approved(this.purchaseApproved)
.verified(this.purchaseVerified)
.owned(this.purchaseOwned);
this.store.error(this.handleError);
this.store.autoFinishTransactions = true;
this.store.refresh();
其他功能:
purchaseCancelled = (p: IAPProduct) => {
console.log(`${ p.id } cancelled`);
}
purchaseYearlyUpdated = (p: IAPProduct) => {
console.log(`${ p.id } updated`);
this.yearlyProduct = p;
this.changeDetectorRef.detectChanges();
}
purchaseMonthlyUpdated = (p: IAPProduct) => {
console.log(`${ p.id } updated`);
this.monthlyProduct = p;
this.changeDetectorRef.detectChanges();
}
purchaseApproved = (p: IAPProduct) => {
console.log(`${ p.id } approved`);
p.verify();
}
purchaseVerified = (p: IAPProduct) => {
console.log(`${ p.id } verified`);
p.finish();
}
purchaseOwned = (p: IAPProduct) => {
console.log(`${ p.id } owned`);
}
handleError = (error) => {
console.log('Error event:',error);
}
purchase(id: string) {
this.store.order(id);
}
ngOnDestroy() {
this.subscriptions.unsubscribe();
this.store.off(this.purchaseCancelled);
this.store.off(this.purchaseYearlyUpdated);
this.store.off(this.purchaseMonthlyUpdated);
this.store.off(this.purchaseApproved);
this.store.off(this.purchaseVerified);
this.store.off(this.purchaseOwned);
this.store.off(this.handleError);
}
重现步骤:
- 从 Xcode 安装应用。
- 购买产品(用户点击购买按钮,该按钮触发 store.order)
- 退出应用
- 取消订阅使其过期
- 订阅到期
- 打开应用,确认订阅确实已过期(状态从已批准变为有效)
- 点击购买按钮(任何订阅)尝试再次购买订阅
- 没有任何反应。没有日志。没有错误。产品状态保持有效。
- 关闭应用然后再次运行也无济于事。
- 卸载应用
- 再次从 Xcode 安装应用
- 再次购买作品
我看不出代码有什么问题,而且由于它在 Android 上运行良好,我们猜测可能是手机或cordova-plugin-purchase 插件出了问题。
我非常感谢任何建议、想法、意见或任何事情。非常感谢您提前。我越来越绝望了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。