- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在实现一个自动续订订阅方案,其中收据验证将由我的服务器端代码处理。关注苹果的documentation ,我将从 NSBundle
获取收据数据,并将该数据传递到我的服务器,该服务器将联系 Apple 以验证收据并将结果通知应用程序。
现在我的问题与收据验证相关的必要流程有关:
如果用户购买订阅,我的收据会自动更新为该次购买的信息吗?如果是这样,是否有必要在购买后立即验证该收据,还是我应该立即“解锁”该应用程序?
在什么情况下我的收据会从 NSBundle
中丢失?如果发生这种情况,我想我应该使用 SKReceiptRefreshRequest
刷新收据,并将其发送到服务器进行验证。
如果用户在不同的设备上安装该应用程序并恢复他的购买restoreCompletedTransactions
,我会同时自动获得收据吗?我想我需要在恢复后验证收据以确保订阅有效,对吗?
当我的服务器尝试验证收据,但该收据无效时,应用端应该怎么办?刷新收据(这将要求用户提供凭据)并再次将其传递给服务器以进行新的重新验证?
最佳答案
If the user purchases a subscription, my receipt will be automatically updated with the information from that purchase?
是的,收据本质上是存储在设备上的文件,购买后收据文件会更新并附加最新交易。
If so, is it necessary to validate that receipt right after a purchase or should I "unlock" the app immediately?
这取决于您对欺诈的关注程度。有许多工具可用于破解越狱设备上的应用内购买,不验证可以让用户免费访问您的内容。如果这是一个问题,请在解锁内容之前验证您的收据。
In what situations will my receipt be missing from NSBundle?
如果用户在购买过程中断开连接,收据数据可能无法完全下载,从而给您留下不完整的收据。我怀疑还有其他情况,但我自己还没有遇到过。
If that happens, I suppose I should use SKReceiptRefreshRequest to refresh the receipt, and send it to the server for validation.
是的,但请记住,这只会更新收据文件,然后您需要再次调用 appStoreReceiptURL
以从文件中检索收据。
If the user installs the app in a different device and restores his purchases restoreCompletedTransactions do I automatically get the receipt at the same time?
收据文件将被更新,但您需要调用 appStoreReceiptURL
获取收据。
I suppose I need to validate the receipt after a restore to make sure there's an active subscription, correct?
是的,好主意。
When my server tries to validate a receipt, and that receipt is not valid, what should happen on the app side? Refresh the receipt (which will ask user for credentials) and pass it to the server again for new re-validation?
我会告诉用户您认为收据无效并提供重试选项。调用SKReceiptRefreshRequest
,再次将收据发送到您的服务器。如果随后失败,请再次显示该选项。
如果用户进行了欺诈性购买,我怀疑他们会向您或 Apple 投诉。
关于iOS 自动续订订阅 : receipt validation flows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25867007/
我正在用 Java 创建一组小部件,用于解码和显示在串行接口(interface)接收到的消息。 消息类型由唯一标识符定义。每个小部件只对特定标识符感兴趣。 如何对应用程序进行编程,以便将消息正确分发
我有以下代码,其中包含多个订阅。我需要实现的是这样的: 订阅activateRoute 以获取用户和产品数据。 返回商品数据后,使用商品数据订阅getSeller服务。 使用返回的卖家数据订阅 get
我已经使用 Fitbit 的 PHP 库 (www.disciplinexgames.com/fitbit) 在我的网站中成功集成了 FitBit api。它工作正常,但我现在想使用订阅 API,以便
在我的 Angular 7 应用程序中,我有下一个功能: getUserData(uid) { return this.fireStore.collection('users').doc(
我正在尝试在 Node 中实现发布/订阅模式,但不使用 Redis。功能应该是相同的;您可以发布到 channel ,订阅 channel 并收听数据(如果您已订阅);以下是 Redis 功能: pu
这是我当前的应用程序结构: /client/client.js /server/server.js collection.js 有 HTML 和 CSS 文件,但这些与我的问题无关。在将我的应用程序拆
我们正在使用OpenTok建立视频聊天室体验,并且在基本工作正常的同时,我发现当 session 室中有很多参与者发布音频时,本底噪声非常高。像Zoom这样的浏览器外解决方案似乎没有这种高水平的“白噪
RabbitMQ 是点对点还是发布-订阅?或者两者都取决于配置选项? 我一直在查看配置,它们似乎都支持点对点模型而不是发布-订阅。即消息一旦被消费就会从队列中删除,并且不可用于第二个消费者。 最佳答案
我是 Angular 6 和 ngrx 商店的新人。我尝试在从商店订阅数据后调度操作,但它会导致无限循环并使浏览器崩溃?我错了什么。我发现它使用 rxjs 的 do/tap 运算符但仍然不起作用的一些
这个问题已经有答案了: Property '...' has no initializer and is not definitely assigned in the constructor (37
这个问题已经有答案了: Property '...' has no initializer and is not definitely assigned in the constructor (37
我正在使用 Visual Studio 2017 v15.6.2 和 Azure Services Authentication Extension 为支持 MSI 的应用程序进行本地 azure 功
我想知道如何确定给定的 WC_Product 对象 $product 是否是订阅产品。 最佳答案 您可以使用他们的辅助函数,这可能是最完整的: if( class_exists( 'WC_Subscr
我正在研究使用服务器发送的事件作为支持 api 来实现“订阅”类型。 我正在苦苦挣扎的是接口(interface),更准确地说,是这种操作的 http 层。 问题: 使用原生 EventSource不
我会根据每个用户的订阅类型向我的用户发送通知。 例如: 用户 A 订阅了所有新闻文章 用户 B 订阅了所有评论 用户 C 订阅了网站上的所有新内容 我有一个每 5 分钟运行一次的脚本(除非该脚本仍在运
我正在使用 Ionic2/Angular2,并且需要使用参数 authData 调用函数,如下所示。 public auth: FirebaseAuth this.auth.subscrib
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我们现有的系统可以持续处理大量文件。粗略地说,每天大约有 300 万个文件,大小从几千字节到超过 50 MB。这些文件从接收到完成使用会经历几个不同的处理阶段,具体取决于它们所采用的路径。由于这些文件
我有一项服务,我使用 Paypal 订阅。 Paypal 有 webhooks。问题是我不知道我需要使用哪个,不知道用户是否为下个月付款。 我使用了 Billing subscription rene
我目前正在为一个网站整理一个处理脚本,遇到了一个我似乎无法找到明确答案的问题。 Paypal 的文档充其量是不确定的,我对 Paypal 的使用还不够多,无法从他们提供的信息中轻松辨别答案。 当通过
我是一名优秀的程序员,十分优秀!