Tag: storekit

在iOS 9.3 / Xcode 7.3中使用StoreKit常量时使用未parsing的标识符

尝试使用这些StoreKit常量之一时出现错误“使用未parsing的标识符”: SKErrorClientInvalid SKErrorPaymentCancelled SKErrorPaymentInvalid SKErrorPaymentNotAllowed SKErrorStoreProductNotAvailable SKErrorUnknown 您的代码可能如下所示: if transaction.error!.code == SKErrorPaymentCancelled { print("Transaction Cancelled: \(transaction.error!.localizedDescription)") } 什么改变了? 是否有需要导入的新模块?

在StoreKit / In-App Purchase中区分初始购买和免费“重新购买”

从StoreKit指南: 如果用户试图购买他们已经购买的非消费品或可更新的订阅,那么您的应用程序会收到该项目的正常交易,而不是恢复交易。 但是,用户不会再为该产品付费。 您的应用程序应将这些交易视为与原始交易的交易完全相同。 这在我正在工作的应用程序中提出了一个巨大的问题。 我们已经通过应用程序内购买从发布商许可了大量内容供销售。 他们要求我们每次出售这些内容(即用户付款)时,我们的服务器会在其服务器上调用一个API来报告交易。 这是为了会计目的,并最终根据我们与他们达成的协议,最终用来确定我们在月底支付多less钱。 我已经阅读了几个关于SO和其他地方的build议,关于比较频繁地调用restoreCompletedTransactions,并且在设备上保持了用户已经购买了什么的本地理解,因此他们不能再被购买。 这对我来说似乎是应该能够在服务器端实现的东西。 但是,我们从Apple服务器获取的收据与StoreKit指南所承诺的购买和重新购买完全一样。 如果在这种情况下(即“您已经付款”和“您没有收到付款”),StoreKit的支付回拨无法作为有效的会计机制进行信任,那么还有什么其他的实时交易stream量见解? 我认为,如果我们告诉他们我们必须在本月底之后等待45天才能从iTunes Connect中获得REAL付款金额,我们认为我们正在与之合作的发行商会很高兴。

在应用程序购买用户取消tx而应用程序在后台:TX州继续采购

我有一些奇怪的行为,用户取消在应用程序购买(沙箱环境),而应用程序在后台,用户尚未login到商店: 过程如下: 用户未login/应用程序ID未在“设置”>“存储”中设置 用户点击购买button。 这调用[[SKPaymentQueue defaultQueue] addPayment:payment]; 用户立即preses主页button(应用程序去背景) Storekitpopup窗口出现要求确认购买。 用户取消 应用程序再次激活,并期望收到- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions ,但没有。 德克萨斯州仍在进行国家采购。 如果testuser已经login到商店,则此过程是不同的。 在这种情况下,上述过程按预期工作。 另一点评论 :经过上述步骤,我实际上购买了另一个应用程序内的项目(包括login到应用程序)。 在此之后,我发送应用程序到后台并重新激活它,它将处理错误的取消交易。 结论:当应用程序处于后台并且未login到商店时,用户取消付款tx会导致延迟交付storekitcallback。 在用户实际login到appstore之后完成交付,并且通过重新激活应用程序触发PaymentQueue进程。 这种行为似乎是错误的,如果真的是这样的真实环境中 ,我可能会认为这是一个Storekit的错误。 有人经历过相同的行为,或可以指示某些东西,以防止在采购状态“悬挂”? 谢谢你,马库斯

iOS恢复应用程序购买与收据

下面的摘录是从苹果文件如何恢复在iOS 7的应用程序购买。他们说,你可以存储收据,以后找出他们已经买了什么,或者你可以刷新应用程序收据。 我的问题是: 1)是否有一个应用程序收据或有多个单一的收据? 2)存储这些收据是否更有意义,而不是直接存储用户已经购买的function 3)如何检查我从刷新中得到的收据? 我所有的尝试parsing它失败了。 4)是否有框架已经有很多function(在iCloud上保存收据/购买产品,使购买更容易,处理下载,处理各种连接问题等)已经? 甚至可能支持远程服务器(和validation)。 我希望有人能帮助! 🙂 刷新应用程序收据 创build一个收据刷新请求,设置一个委托,并开始请求。 该请求支持在testing期间在各种状态下获取收据的可选属性,例如过期收据 – 有关详细信息,请参阅SKReceiptRefreshRequest的initWithReceiptProperties:方法的值。 request = [[SKReceiptRefreshRequest alloc] init]; request.delegate = self; [request start]; 刷新收据后,检查并交付添加的任何产品。

iOS沙盒testing用户帐户订阅pipe理

我目前正在尝试将IAP添加到现有的应用程序。 为此,我添加了一些产品并创build了一些testing用户。 产品是定期订阅。 我正在testing的设备是iOS 4的iPhone 4S。 我可以成功地查询我的产品的商店,并成功购买我的新testing用户。 我遇到的问题是,如果我尝试从“商店设置应用”pipe理我的订阅,它会强制我通过告诉我“此帐户尚未用于购买AppStore中的任何内容,请检查您的帐户并继续“。 如果我查看帐户,不会让我继续提供CreditCard信息。 最终的结果是,我永远不能取消我的testing订阅。 我删除了testing用户并创build了新的用户,删除了应用程序并重新安装了它,杀了StoreApp和Settings App,重新启动了设备,在购买之前通过电子邮件validation了帐户,未在购买前通过电子邮件validation帐户…所有排列似乎失败了。 有时我会购买相同的订阅两次,这将提示StoreKit要求我pipe理我的订阅设置。 有时会导致以前的“帐户审核”stream程,有时会导致出现“无法连接到iTunes Store”的警报。 我已经没有了如何继续的想法。 编辑 – 下面是我创build的任何iTunesConnecttesting用户的事件stream程 初始认购 使用现有的ID testing帐户login pipe理订阅 AppStorelogin 无法连接到AppStore 检查您的帐户 然后,审查过程迫使我inputCreditCard信息,即使它的地址是“1 Infinite Loop Cupertino,CA”(即它知道这是一个testing帐户)。

iOS上的StoreKit – 自动更新的订阅 – 如何知道它是否免费试用?

在iTunes Connect中,可以为自动更新订阅提供免费试用期。 App > Manage In App Purchases > Subscription Basic > 1 Month > Offer a free trial? 我怎样才能得到这个信息在客户端? 我可以看到SKProduct没有关于这个的任何信息。 由于我们正在进行市场营销活动,所以最终用户很难理解有关产品的信息是否有试用期。 当然可以从我维护的服务器获取这种信息,但是随后我们将更新我们的服务器和iTunes Connect。 所以我不接受这样的答案,除非它从苹果的服务中获取试用期信息。

如何在iOS上解压缩.zip文件?

StoreKit下载IAP内容包后,它会返回一个NSURL,如下所示: 文件://localhost/private/var/mobile/Applications/45EF2B3A-3CAB-5A44-4B4A-631A122A4299/Library/Caches/BA32BC55-55DD-3AA4-B4AC-C2A456622229.zip/ 尽pipe我发现所有的消息来源都声称StoreKit在下载之后解压缩了内容包,但是却让我知道了一个ZIP文件。 这个ZIP可能包含内容包的文件结构。 但是,我如何解压缩?

(iOS + StoreKit)我可以在沙箱中检测吗?

我有应用程序内购买工作得很好,我要去服务器validation路线。 服务器需要知道我是否在沙箱中,所以现在我只是发送一个“&sandbox = 1”参数。 当然,当完整版本的应用程序出来,我不会发送这个参数。 我宁愿在我的应用程序中没有这个硬编码,因为这将使testing在未来变得困难,在将构build提交给Apple之前要记住更改一个(大的)事项。 有没有办法,我可以问StoreKit,如果我在沙箱中,那么我可以确定是否需要将此参数发送到我的服务器? 另外,还有没有其他的最佳做法来处理服务器validation? 更多的思考,我应该只是让服务器总是先检查现场系统,然后沙箱? 如果苹果的ID在live和sandbox系统之间隔离,那么它会不会有什么坏处呢? 谢谢。

如何使用不可更新的应用程序内购买来支持多种设备?

我正在构build一个iOS应用程序,其中将包含一个具有不续订订阅的IAP。 苹果公司在IAP的概述中提供了这个块头: 您需要向用户拥有的所有设备提供不续订订阅。 非续订订阅不会通过Store Kit自动同步到所有设备; 你必须自己实施这个基础设施。 例如,大多数订阅由外部服务器提供; 您的服务器将需要实现一种机制来识别用户,并将订购购买与购买它们的用户相关联。 我想遵循这个规则:我希望我的用户能够利用他们在其他设备上的一个设备上购买的订阅。 那么我怎样才能在他们的iPhone和iPad上识别同一个用户呢? 我知道你不能使用Apple ID,也不能依赖注册方法。 我刚才发现这个问题 , 那里给出的答案似乎不可行。 必须有别人所做的更优雅的事情。

如何检测并validation自动续订订阅的续订?

所以我已经为我的应用程序设置了自动续订订阅,期限为1个月,这相当于沙箱中的5分钟左右。 在我订阅的客户端应用程序中,将收据发送到我的服务器,得到validation,并且在我的数据库中logging了该用户已订阅的logging。 我的问题是如何检查这个订阅是否被更新? 我已经阅读了文档,不知道该怎么办。 这是我到目前为止: 发送到我的服务器的初始收据validation状态为0 ,很好。 我也得到latest_receipt ,我在我的数据库中取代最旧的收据。 6分钟后,当我尝试validationlatest_receipt ,我得到状态21006 (过期的收据),这: { receipt: { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles', unique_identifier: '————', original_transaction_id: '———-', expires_date: '1376129825000', transaction_id: '————', quantity: '1', product_id: 'subscription', item_id: '——–', bid: 'com.——–', unique_vendor_identifier: '———', web_order_line_item_id: '———', bvrs: '2.0', expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT', purchase_date: '2013-08-10 10:12:05 Etc/GMT', purchase_date_ms: '1376129525000', expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles', […]