Tag: storekit

iOS应用内购买永远不会完成

我正在尝试为应用创build应用内购买,但是我遇到了问题。 付款过程开始,用户必须input他们的密码; 然而,付款从来没有实际完成。 我知道我在iTunesconnect中设置了正确的标识符,并且我还创build了一个testing帐户来购买应用内购买。 当我运行下面的代码,我得到以下消息输出: “用户可以付款” “产品可用” “交易状态 – >采购” input密码后,系统会提示我确认在沙盒环境中的应用内购买。 我点击购买,提示消失; 但是,我从来没有得到实际购买的消息。 只是没有任何反应 没有启用插件,什么都没有。 这在模拟器和实际设备上都会发生。 但是,如果我按取消而不是购买,我得到“交易状态 – >取消”消息。 任何想法我做错了什么? – (void)buyTapped { if ([SKPaymentQueue canMakePayments]) { NSLog(@"User can make payments"); SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:kLineColorProductIdentifier]]; [productRequest setDelegate:self]; [productRequest start]; } else { NSLog(@"User cannot make payments"); } } #pragma mark – SKProductsRequestDelegate […]

iOS的IAP收据validation

我正在使用Apples IAP和StoreKit框架来购买订阅的客户端/服务器应用程序。 我们希望客户(iPhone或iPad)通过使用StoreKit框架的iTunes帐户与苹果进行初始订购,然后将收据传递给我们的服务器,这将validation它,然后更新用户帐户状态。 我们还希望服务器负责pipe理订阅的状态(检查自动更新,取消等)。这些都是使用iOS 7风格的appleReceipts,而不是当前已弃用的iOS 6风格的交易收据。 苹果公司的文件说,张贴到以下url,以validation沙箱中的收据以及收据和密码 https://sandbox.itunes.apple.com/verifyReceipt 到目前为止,所有事情都应该如此。 在那里,让我感到困惑的是在回应中。 苹果公司的文件说,应答应该有多达4个字段。 如果您正在validationiOS 7样式的应用收据,那么您只应该预期前两个。如果是iOS 6样式的订阅交易收据,那么您应该期望看到所有4个。 1)状态(0为有效,否则为一些错误代码) 2)收据(发送的收据的JSON表示) 3)latest_receipt(仅针对自动更新订阅的iOS 6样式事务回执返回,最近更新的基于64编码的事务回执。 4)latest_receipt_info(与JSON格式相同) 问题1:即使我正在validationiOS 7样式的应用收据,我也看到了所有4个。 文档说,不应该发生。 https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1 问题2:我们希望通过使用客户在初次购买后通过的原始应用收据来轮询该API来维护用户订阅状态。 latest_receipt_info字段似乎包含不断更新的事务列表,而receipt字段是原始副本,没有更新的事务信息。 我的问题:似乎服务器可以获取更新事务信息的唯一方法是查看latest_receipt_info或latest_receipt字段,但根据文档,这些字段不应出现在响应中。 这是苹果文档中的错误吗? 或者,获取最新一组事务的唯一方法是让客户端在SKPayementTransactionObserver得到通知时发送更新的SKPayementTransactionObserver ? 编辑 – 根据下面的评论添加步骤和一些代码。 1)使用SKPaymentQueue购买autoRenewSubscription产品: SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:product]; payment.applicationUsername = [self hashedValueForAccountName:[UserAccount sharedInstance].subscriberKey]; [[SKPaymentQueue defaultQueue] addPayment:payment]; 2)付款完成后,我通过SKPaymentTransactionObserver接到回电,并通过以下URL发送文件: NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; 到我的远程服务器。 3)我正在使用下面的Python代码来validation收据 […]

StoreKit的SKStoreProductViewController离开导航栏和视图之间的空间?

我有这个UIViewController的子类,它显示了一个SKStoreProductViewController 。 这个视图控制器最初是为iOS 5创build的,并没有使用自动布局。 我的问题是,当提供SKStoreProductViewController时,导航栏和实际内容之间有一个空格…如果您滚动视图,分段控件(详细信息/评论/相关)浮动在导航栏下方(请参阅下面的图像,我添加了一个面具的图像,使问题更加明显)。 由于我们无法访问所呈现的视图控制器,我猜测它与呈现SKStoreProductViewController的控制器SKStoreProductViewController 。 当用户点击显示控制器的button时,我试图改变/移动视图的框架,我也做了一些像self.navigationController.navigationBar.translucent = NO; 但似乎没有任何帮助。 有没有人有类似的问题? 任何想法如何解决它?

多SKPaymentTransaction

我在应用程序中实现了StoreKit。 我注意到,对于我的一些testing账户, SKPaymentTransaction有多个SKPaymentTransaction。 这导致SKPaymentTransactionObserver被多次调用SKPaymentTransactionStatePurchased 这个问题似乎更多的时候停止应用程序中升级,或将应用程序在后台。 我不确定是什么原因导致多次付款,或者是这种预期的行为? 另外,在确认完成后,确保完成所有购买的交易。

Apples服务器上的托pipe内容免费,非消费型应用内购买

包含托pipe在Apple服务器上的内容的非易耗品应用内购买是否可以免费? 在文档中找不到任何关于此的内容,因为您可以在iTunes连接中设置应用内购买免费,我认为这是可能的。 我已经在iTunes连接上设置了非消费型应用程序内购买,上传了一些内容并将其价格设为免费。 不幸的是,当我使用产品ID请求产品数据时,我在SKProductsResponse.invalidProductIdentifiers数组中收到该ID。 我还在价格上设置了另一个与上一个不同的应用程序内购买,因为它的价格层级是Tier 1而不是Free。 这个工作得很好。 感谢您花时间阅读。

如何将用户与涉及Apple状态通知的自动续订订阅相关联?

如何关联自动续订订阅,让我知道哪些通知是针对我数据库中的哪些用户的? 是否有某种来自原始收据的ID,我可以将其存储为用户的字段? 我知道用户何时取消或更新等,但这并不能帮助我确定哪个用户正在发生这种情况。 当您访问文档并向下滚动到状态更新通知时 ,您会注意到状态通知确实有一个original_transaction_id字段,这是否仍然存在并且可以依赖?

In App Purchase的产品ID是否必须以反向DNS开头?

In App Purchase的产品ID是否必须以像com.mycompany.My_Awesome_Game.Level_Pack_1这样的反向DNS开头,还是可以像Level_Pack_1一样独立Level_Pack_1 ?

检测iOS 10.3应用评级对话框显示的机制?

TL; DR:iOS上有什么方法可以检测iOS 10.3中添加的Storekit App Rating对话框的存在/显示吗? 我最近添加了新的应用程序评级对话框支持我的应用程序使用: [SKStoreReviewController requestReview]; 但是,我知道有一些使用注意事项(如此处所述 ),即对话可能会或可能不会在调用上述function时显示,不包括客户是否已经对应用程序进行了评级或客户已经暗淡对话3次。 我也知道,苹果不希望用户操作直接调用对话框的显示,因此报告的对话框的存在: 虽然您应该在应用程序的用户体验stream程中调用此方法,但评分/评论请求视图的实际显示由App Store策略pipe理。 由于此方法可能会或可能不会显示警报,因此响应button点击或其他用户操作来调用它是不合适的。 但是,这并不能阻止UX团队将这些button放在graphicsdevise中,并询问“我们能否知道对话框是否显示”? 所以,我的问题是,是否有其他间接的方式,可以确定这个对话框的介绍? 我最近一直在使用Appium对Android和iOS应用程序进行一些自动化testing,并使用Xpath来查找本机UI元素,所以只是想知道是否可以在iOS应用程序的上下文中实现相同的function。

如何检查沙箱服务器状态? (“无法连接到iTunes商店”)

我正在开发应用内购买使用这个优秀的教程: http : //www.raywenderlich.com/21081/introduction-to-in-app-purchases-in-ios-6-tutorial ,我得到一个错误“无法连接到iTunes商店“,这似乎可以与苹果的沙箱服务器closures; 除了用沙盒状态search推文以外,还有其他方法可以确认他们的状态,否则debugging起来很困难(可以阅读)。

注册应始终是可选的非续订订阅?

我打算在SaaS应用程序上使用不续订的订阅,因为苹果不允许自动更新SaaS。 苹果还要求我们提供一个服务器端机制来跟踪多个设备的订阅。 但是,根据我的研究,如果注册是强制性的,苹果也似乎拒绝应用程序,所以这样的用户注册必须是可选的。 我的应用程序可以在不使用注册的情况下使用,因此注册是可选的。 但是,如果用户想要购买不更新的订阅,则注册是强制性的以跟踪订阅。 苹果拒绝这种做法吗? 相关链接: 应用程序被拒绝,以跟踪用户不更新订阅 *更新 我检查了WWDC2012的会议video, 似乎可以要求用户在购买前注册您的服务器,以便不更新潜艇。 一旦他们真正批准了这个方法,我会发表一个答案。 *更新 我通过parsing中心得到了苹果的回复。 底线是我们应该允许用户无需注册就可以购买订阅。 这是苹果审查小组的答案。 这是适当的,使注册可选。 您可能会提供警告,指出用户将无法在不注册的情况下跟踪多个设备上的订阅。 但是,您也应该在购买订阅后提供注册和跟踪订阅的选项。