这似乎是我研究中的一个常见问题
这一切都是在真实设备上完成的。
我的应用购买了 In App Purchase,但是当我恢复 In App Purchase 时它没有反应。
接着,
@IBAction func RestoreItem(_ sender: Any) {
SKPaymentQueue.default().restoreCompletedTransactions()
print("RESTORING PURCHASES")
}
它应该调用产品请求,然后调用支付队列函数。
我读过,如果 iTunes 帐户不包含未调用的购买。
如果我运行该应用程序并购买了该应用程序购买的每件商品,并且说这些商品之前已经购买过,所以它知道购买历史
我不明白的是,如果它知道商品已购买,为什么在调用该函数后没有反应(如上所示)。
如果我在我的设备上完全注销我的 iTunes 帐户并触发上面的操作,它会要求我登录我的帐户。我这样做(我之前购买的同一个帐户)并且它不会触发 product request(我到处都有 NSlog 语句以查看我处于什么状态)
任何想法,因为我已经为此苦苦挣扎了好几天。 谢谢
我在下面包含了代码,这适用于购买(仅供引用)。
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
print("product request")
let myProduct = response.products
for product in myProduct {
print("product added")
print(product.productIdentifier)
print(product.localizedTitle)
print(product.localizedDescription)
print(product.price)
list.append(product)
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("add payment")
for transaction: AnyObject in transactions {
let trans = transaction as! SKPaymentTransaction
print(trans.error as Any)
switch trans.transactionState {
case SKPaymentTransactionState.purchased:
print("buy ok, unlock IAP HERE")
print(p.productIdentifier)
let prodID = p.productIdentifier
switch prodID {
case "com.clivedancey.social":
print("Social Reality Unlocked")
outBuySocial.setTitle("Social Reality Enabled", for: UIControlState.normal)
SocialReality()
case "com.clivedancey.inapp":
print("MAIN UPGRADE UNLOCKED")
outBuyMain.setTitle(" Main Upgrade Complete", for: UIControlState.normal)
mainunlock()
default:
print("IAP not setup")
}
queue.finishTransaction(trans)
case SKPaymentTransactionState.restored:
print("buy ok, unlock IAP HERE")
print(p.productIdentifier)
let prodID = p.productIdentifier
switch prodID {
case "com.clivedancey.social":
print("Social Reality Unlocked")
outBuySocial.setTitle("Social Reality Enabled", for: UIControlState.normal)
SocialReality()
outTransactionLabel.text = " Purchases restored"
case "com.clivedancey.inapp":
print("MAIN UPGRADE UNLOCKED")
outBuyMain.setTitle(" Main Upgrade Complete", for: UIControlState.normal)
outTransactionLabel.text = " Purchases restored1"
mainunlock()
default:
print("IAP not setup")
}
queue.finishTransaction(trans)
case.failed:
print("buy error")
queue.finishTransaction(trans)
break
default:
print("Default")
break
}
}
}
最佳答案
一些事情。首先 - 希望不重要 - 是您在 中使用“ react ”,但是当我恢复应用程序内购买时它没有反应。我希望您不要意味着永远不会命中断点。
我的 StoreKit 代码有两件事我在您发布的代码中没有看到。
(1) 在 viewDidLoad 中,我检查购买并存储它:
func fetchAvailableProducts() {
productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productsRequest.delegate = self
productsRequest.start()
}
public func productsRequest (_ request:SKProductsRequest, didReceive response:SKProductsResponse) {
if (response.products.count > 0) {
iapProducts = response.products
}
}
值得注意的是将 View Controller 设置为委托(delegate) - 我在您的代码中看不到的东西。 (虽然逻辑听起来不错。)
(2) 我的恢复购买多了一行代码:
func restorePurchases() {
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
关于ios - 在 App Purchase 中不恢复与沙箱用户的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44860482/
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的