ios - 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 插件有问题。
我真的很感激任何建议,想法,意见,任何东西。非常感谢您提前。我越来越绝望了。
解决方案
推荐阅读
- loopbackjs - 是否有一种等效的方法可以通过环回以编程方式执行“lb soap”?
- oauth-2.0 - 从授权服务器而不是客户端服务开始的 OAuth 2 进程
- c++11 - C++ Make function unaccessable in the child class
- java - Aspose. Apply horizontal alignment for Range of Cells in Excel Documnet
- image-processing - 对象大小与深度图的关系
- javascript - use angular component function as callback in settings object
- asp.net-mvc - Ajax 表单中未显示 MVC AddModelError 自定义错误
- python - 自动化 Abaqus 运行脚本的 Python 代码
- android - Schedule tasks for later
- azure - 使用部署详细信息克隆 Azure 资源组?