Ios Swift,spritekit:应用程序内购买代码运行时,什么都没有发生?
好的,我在Swift工作,我需要帮助。我已经学习了4个不同的教程,介绍了如何在sprite kit中使用快速复制的代码一字不差地实现应用内购买,但没有任何东西适合我 以下是我采取的步骤: 进入Itunes Connect并在我的应用记录下创建了应用内购买。我的应用内购买的产品Id是GameOverSaveSavior 在Xcode中,我已将我的应用程序的应用程序内购买功能打开,确保我的团队已设置为我的帐户,并确保“信息”下的捆绑标识已设置为ITunes Connect中我的应用程序的捆绑标识 在编写任何代码之前,我已经在GameSecene.swift文件中导入了StoreKit 至于代码,这是我所做的: 1在GameSecene.swift中,在didMoveToView func的末尾,我有:Ios Swift,spritekit:应用程序内购买代码运行时,什么都没有发生?,ios,swift,sprite-kit,in-app-purchase,Ios,Swift,Sprite Kit,In App Purchase,好的,我在Swift工作,我需要帮助。我已经学习了4个不同的教程,介绍了如何在sprite kit中使用快速复制的代码一字不差地实现应用内购买,但没有任何东西适合我 以下是我采取的步骤: 进入Itunes Connect并在我的应用记录下创建了应用内购买。我的应用内购买的产品Id是GameOverSaveSavior 在Xcode中,我已将我的应用程序的应用程序内购买功能打开,确保我的团队已设置为我的帐户,并确保“信息”下的捆绑标识已设置为ITunes Connect中我的应用程序的捆绑标识 在
// Set IAPS
if(SKPaymentQueue.canMakePayments()) {
println("IAP is enabled, loading")
var productID:NSSet = NSSet(objects: "GameOverSaveSavior")
var request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>)
request.delegate = self
request.start()
} else {
println("please enable IAPS")
}
这会在应用程序运行时将产品请求输出到控制台
3在GameSecene.swift中,在我的touchesBegind func中,当按下右键时,我有以下内容:
//In app purchase
if touchedNode == saveMeBtn {
println("button touched!")
for product in list {
var prodID = product.productIdentifier
if(prodID == "GameOverSaveSavior") {
p = product
buyProduct() //This is one of the functions we added earlier
break;
}
}
这个按钮按下了!当按下按钮时
我不知道我做错了什么。代码编译时没有错误,但当按下我的按钮时,什么也没有发生。没有提示要求用户登录或购买任何东西-无。
我主要关注这个问题:
在编写代码之前,我还应该做些什么?我的代码中缺少什么吗?我想我可以帮助您: 我以前有过你的问题。还有一个类似的问题,我在这里解决了: 以下是我找到的解决方案: 删除
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
无论你身在何处,只要把它放在一个地方,每次你的应用启动时都会执行一次。我把它放在viewDidLoad中
这将检查所有未完成的事务,并在应用程序加载后终止它们,从而在用户触发IAP之前删除任何可能的错误
如果这个答案对你有帮助,别忘了投票
另外,这不是我的问题,但请确保完成每个PurchaseState的事务,如下所示:
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("Add Payment")
for transaction:AnyObject in transactions{
let trans = transaction as! SKPaymentTransaction
print(trans.error)
switch trans.transactionState{
case .Purchased:
print("IAP unlocked")
print(p.productIdentifier)
let prodID = p.productIdentifier as String
switch prodID{
case "IAP id":
print("Keep on")
keepOn()
default:
print("IAP not setup")
}
queue.finishTransaction(trans)
break
case .Failed:
print ("Buy error")
queue.finishTransaction(trans)
break
default:
print("default: Error")
break
}
}
}
永远不要忘记这一点:
queue.finishTransaction(trans)
并单独说明。恢复 @Aidan Kaiser你似乎对IAPs这个话题非常了解,我也试着按照你的其他答案来回答。你知道我做错了什么吗?任何帮助都是非常感激的。添加的产品怎么样?您看到日志行了吗?您确定要从商店购买产品吗?@giorasch否,添加的产品未打印到控制台,因此我一定不会从商店购买产品。我怎样才能解决这个问题?这是iTunes连接问题吗?您确定使用的是iAP的产品id而不是其参考名称吗?产品id和参考名称相同,但我使用的是产品id
queue.finishTransaction(trans)