- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现这段代码可以在 iOS 9 上使用 swift 2 执行应用内购买。我的 IAP(应用内购买)将位于表格中。它将显示为一条提醒消息,您可以在其中点击购买 或取消。如果您点击购买,则会显示来自 Appstore 的新提醒以确认这一点。
我使用沙盒用户登录。确认后,我的控制台显示:
Transaction Failed
代码如下:
import UIKit
import StoreKit
import iAd
protocol IAPurchaceViewControllerDelegate {
func didBuyPremium(Index: Int)
}
class iAP: UIViewController, UITableViewDelegate, UITableViewDataSource, SKProductsRequestDelegate, SKPaymentTransactionObserver {
@IBOutlet weak var LoadingScreen: UIView!
@IBOutlet weak var tblProducts: UITableView!
var delegate: IAPurchaceViewControllerDelegate!
var productIDs: Array<String!> = []
var productsArray: Array<SKProduct!> = []
var selectedProductIndex: Int!
var transactionInProgress = false
override func viewWillAppear(animated: Bool) {
view.bringSubviewToFront(LoadingScreen)
LoadingScreen.hidden = false
navigationController?.setNavigationBarHidden(false, animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tblProducts.delegate = self
tblProducts.dataSource = self
// Replace the product IDs with your own values if needed.
productIDs.append("xxx_Iap")
requestProductInfo()
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
}
// MARK: UITableView method implementation
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return productsArray.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 65
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("IAPCell") as! ModifyCellsIAP
let product = productsArray[indexPath.row]
cell.PremiumName.text = product.localizedTitle
cell.PremiumBeschreibung.text = product.localizedDescription
let price = "\(product.price)"
let FormatPrice = price.stringByReplacingOccurrencesOfString(".", withString: ",")
cell.PremiumPreis.setTitle("\(FormatPrice)€", forState: .Normal)
LoadingScreen.hidden = true
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
selectedProductIndex = indexPath.row
showActions()
tableView.cellForRowAtIndexPath(indexPath)?.selected = false
}
func requestProductInfo() {
if SKPaymentQueue.canMakePayments() {
let productIdentifiers = NSSet(array: productIDs)
let productRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productRequest.delegate = self
productRequest.start()
}
else {
print("Cannot perform In App Purchases.")
}
}
func showActions() {
if transactionInProgress {
return
}
let actionSheetController = UIAlertController(title: "Upgrade", message: "Möchten Sie diese Erweiterung freischalten?", preferredStyle: UIAlertControllerStyle.ActionSheet)
let buyAction = UIAlertAction(title: "Freischalten", style: UIAlertActionStyle.Default) { (action) -> Void in
let payment = SKPayment(product: self.productsArray[self.selectedProductIndex] as SKProduct)
SKPaymentQueue.defaultQueue().addPayment(payment)
self.transactionInProgress = true
}
let cancelAction = UIAlertAction(title: "Abbrechen", style: UIAlertActionStyle.Cancel) { (action) -> Void in
}
actionSheetController.addAction(buyAction)
actionSheetController.addAction(cancelAction)
presentViewController(actionSheetController, animated: true, completion: nil)
}
func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
if response.products.count != 0 {
for product in response.products {
productsArray.append(product )
}
tblProducts.reloadData()
}
else {
print("There are no products.")
}
if response.invalidProductIdentifiers.count != 0 {
print("Invalid: \(response.invalidProductIdentifiers.description)")
}
}
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case SKPaymentTransactionState.Purchased:
print("Transaction completed successfully.")
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
transactionInProgress = false
delegate.didBuyPremium(selectedProductIndex)
case SKPaymentTransactionState.Failed:
print("Transaction Failed");
SKPaymentQueue.defaultQueue().finishTransaction(transaction)
transactionInProgress = false
default:
print("Default: \(transaction.transactionState.rawValue)")
}
}
}
}
最佳答案
我最近在我的应用中成功实现了应用内购买。乐于分享经验。 Objective-C 中的代码,但我相信这不应该有任何根本的区别。
要检查的事情:
检查应用内购买是否可用:
if ([SKPaymentQueue canMakePayments] == YES) {
// proceed with payment
}
交易失败错误代码:
if (transaction.error.code != SKErrorPaymentCancelled) {
// This is the error that should be presented to user and/or processed
}
else {
// "Canceled" error should go silently for user as this is more or less expected.
// The user can re-issue the payment process later on
}
关于ios - 触摸 "buy"后应用内购买失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32623769/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我正在尝试弄清楚如何在单击“立即购买”按钮时使用单选按钮从表单中提取数据。我知道在 react 中你可以获取值并设置状态,但我正在尝试使用一个 ajax 调用,我不是 100% 了解如何设置它。我尝试
我注意到我的一位 friend 在使用它。 » Buy for $1,691 如果我使用它,我感觉没有任何变化。 » Buy for $1,691 那么谁能解释一下两者的区别是什么? 只是想知道为什么
有一个经典的面试问题,利润最大化,一次交易买股票,允许n次交易和k次交易。 有人问我类似的问题,但有一个扭曲约束:您可以多次购买股票(任何一天不超过一个单位),但您不能在卖出股票后购买。 这有一个你只
我在窗体上有两个按钮,其中一个按钮包含货币代码(EUR,USD,GBP,CHF等),另一个按钮-交易方向(买入或卖出)。还有一些实用程序通过文本来识别按钮。 为了识别带有货币的按钮,我使用了正则表达式
我发现这段代码可以在 iOS 9 上使用 swift 2 执行应用内购买。我的 IAP(应用内购买)将位于表格中。它将显示为一条提醒消息,您可以在其中点击购买 或取消。如果您点击购买,则会显示来自 A
对于产品系列页面 ( https://bloomthis.co/collections/on-demand-blooms ),当每个产品悬停在上面时,会显示替代图像。备用图片是产品页面中添加的最后一张
这个问题在这里已经有了答案: 关闭 10 年前。
我正在开发一个允许人们在IOS应用程序中提出某种问题的应用程序,在后端,有人(人类)可以回答这些问题。显然,答案有些延迟(10分钟-1小时)。 我可以为此使用In App Purchase模式(消耗品
我希望使用 ES6、react、react-redux 和您的 js-buy-sdk api 构建一个电子商务 Web 应用程序。我的问题是,从shopify获取所有产品并将它们放入商店后,我似乎没有
我正在使用 Shopify 的 BUY SDK 创建自定义店面。 import Client from 'shopify-buy' const client = Client.buildClient(
我正在尝试在应用程序购买中使用 Android。我使用的是官方文档和 util(Base64 等)。我正在使用托管 项目。我在哪里以及如何处理已经购买的元素? (我将 bool 值设置为 true 并
我正在使用 shopify buy SDK 创建自定义店面: 我在尝试添加订单项时遇到错误 下面的示例代码都可以正常工作,但遇到“addLineItems”方法时除外:我已经检查了参数,它们似乎没问题
我目前有应用内购买“恢复”按钮, 它确实工作,但本质上它要求用户在整个过程中“购买”升级(就像普通的应用程序内一样)我担心这会 a) 被苹果拒绝b) 吓唬用户,让他们认为他们再次付费 有什么办法可以改
我的教授指示我们制作一个类似星巴克的菜单,用户可以在其中继续输入订单直到完成。我在循环中显示了菜单,但无法将输入的订单相加并显示总数。 #include using namespace std; i
过去 15 天试图解决 paypal 问题,在 PayPal 升级后,我的客户在付款时遇到问题,前几天它有时工作正常但现在只显示错误。 在我选择要购买的商品并单击“立即购买”按钮后,paypal 显示
我在网站上工作,我需要与 Payza 集成。从我读到的“立即购买”按钮看起来像这样: 这是不安全的。 Payza 是否提供任何 API 来保护我的按钮(例如 P
我正在使用 Paypal 的“立即购买”按钮,我很困惑为什么它不起作用(我以前做过)。 我在 Paypal 上创建了一个“立即购买”按钮,并取消选中“在 Paypal 上保存此按钮”- 因此它没有托管
我有一个集成了 Facebook SDK 的 iOS 应用程序,并且我一直在运行 Facebook 的按安装付费事件。 最近尝试为另一个具有相同 SDK 的应用程序设置此功能,但我在设置 Facebo
我目前正在使用 Shopify Buy Button . 在大多数情况下,我只是复制并粘贴了嵌入代码,并没有做太多更改。 我有一些产品需要购买 5 件或更多的所述商品。 典型的添加到购物袋按钮只添加一
我是一名优秀的程序员,十分优秀!