Ios Swift/应用商店:应用内购买存在问题
我的应用程序有问题。我的应用内购买在ios 12,4和iphone 5s上运行得非常好。但是,当我在苹果商店发送二进制文件时,我得到了一个回复:“我们注意到你的应用程序仍然没有在应用程序中显示应用内购买产品的购买按钮。”。只有在支付处理就绪时,才会显示购买按钮。在家大约2到3秒钟。但对他们来说,这显然根本不起作用。。。 这是我的商店处理一切的完整代码。我还特别指出,我的iphone有一个购买窗口,并在沙箱中购买集成购买Ios Swift/应用商店:应用内购买存在问题,ios,swift,in-app-purchase,Ios,Swift,In App Purchase,我的应用程序有问题。我的应用内购买在ios 12,4和iphone 5s上运行得非常好。但是,当我在苹果商店发送二进制文件时,我得到了一个回复:“我们注意到你的应用程序仍然没有在应用程序中显示应用内购买产品的购买按钮。”。只有在支付处理就绪时,才会显示购买按钮。在家大约2到3秒钟。但对他们来说,这显然根本不起作用。。。 这是我的商店处理一切的完整代码。我还特别指出,我的iphone有一个购买窗口,并在沙箱中购买集成购买 import UIKit import StoreKit import Me
import UIKit
import StoreKit
import MessageUI
class ShopViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver, MFMailComposeViewControllerDelegate {
@IBOutlet weak var buyBtn: UIButton!
@IBOutlet weak var restore: UIButton!
@IBOutlet weak var mail: UIImageView!
@IBOutlet weak var shopDescription: UILabel!
var productsRequest = SKProductsRequest()
var validProducts = [SKProduct]()
var productIndex = 0
override func viewDidLoad() {
super.viewDidLoad()
buyBtn.isHidden = true
shopDescription.numberOfLines = 0
shopDescription.lineBreakMode = NSLineBreakMode.byWordWrapping
shopDescription.sizeToFit()
shopDescription.text = NSLocalizedString("packpro", comment: "")
// SKPaymentQueue.default().add(self)
let tap4 = UITapGestureRecognizer(target: self, action:#selector(tappedMe5))
mail.addGestureRecognizer(tap4)
mail.isUserInteractionEnabled = true
fetchAvailableProducts()
}
func fetchAvailableProducts() {
let productIdentifiers = NSSet(objects:
"customLifePremium" // 0
)
productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)
productsRequest.delegate = self
productsRequest.start()
}
func productsRequest (_ request:SKProductsRequest, didReceive response:SKProductsResponse) {
if (response.products.count > 0) {
validProducts = response.products
let prod100coins = response.products[0] as SKProduct
print("1st rpoduct: " + prod100coins.localizedDescription)
buyBtn.isHidden = false
}
}
/* func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, for product: SKProduct) -> Bool {
return true
}*/
func canMakePurchases() -> Bool { return SKPaymentQueue.canMakePayments() }
func purchaseMyProduct(_ product: SKProduct) {
if self.canMakePurchases() {
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(payment)
} else { print("Purchases are disabled in your device!") }
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction {
switch trans.transactionState {
case .purchased:
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
UserDefaults.standard.set(true, forKey: "premiumUser")
UserDefaults.standard.set(false, forKey: "limitedVersion")
break
case .failed:
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
print("Payment has failed.")
break
case .restored:
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
print("Purchase has been successfully restored!")
UserDefaults.standard.set(true, forKey: "premiumUser")
UserDefaults.standard.set(false, forKey: "limitedVersion")
break
default: break
}}}
}
func restorePurchase() {
SKPaymentQueue.default().add(self as SKPaymentTransactionObserver)
SKPaymentQueue.default().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
print("The Payment was successfull!")
}
override func viewWillAppear(_ animated: Bool) {
setGradientBackground()
super.viewWillAppear(animated)
}
@IBAction func restoreCC(_ sender: Any) {
restorePurchase()
}
@IBAction func buyCC(_ sender: Any) {
productIndex = 0
purchaseMyProduct(validProducts[productIndex])
}
@objc func tappedMe5()
{
if MFMailComposeViewController.canSendMail() {
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setToRecipients(["dfmv.enterprise@gmail.com"])
mail.setSubject("")
mail.setMessageBody("", isHTML: true)
present(mail, animated: true)
}else{
let alert = UIAlertController(title: NSLocalizedString("info", comment: ""), message: NSLocalizedString("noClientMail", comment: ""), preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: NSLocalizedString("ok", comment: ""), style: UIAlertAction.Style.default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
func setGradientBackground() {
let colorTop = UIColor(red:1.00, green:0.30, blue:0.30, alpha:1.0).cgColor
let colorBottom = UIColor(red:1.00, green:0.69, blue:0.25, alpha:1.0).cgColor
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [colorTop, colorBottom]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.frame = self.view.bounds
self.view.layer.insertSublayer(gradientLayer, at:0)
}
}
导入UIKit
进口存储套件
导入消息用户界面
类ShopViewController:UIViewController、SKProductsRequestDelegate、SKPaymentTransactionObserver、MFMailComposeViewController delegate{
@IBN弱var buyBtn:UIButton!
@IBVAR弱恢复:UIButton!
@ibvar邮件:UIImageView!
@IBVAR商店描述:UILabel!
var productsRequest=SKProductsRequest()
var validProducts=[SKProduct]()
var productIndex=0
重写func viewDidLoad(){
super.viewDidLoad()
buyBtn.ishiden=true
shopDescription.numberOfLines=0
shopDescription.lineBreakMode=NSLineBreakMode.byWordWrapping
shopDescription.sizeToFit()
shopDescription.text=NSLocalizedString(“packpro”,注释:“”)
//SKPaymentQueue.default().add(self)
设tap4=UITAPPgestureRecognitor(目标:自我,操作:#选择器(tappedMe5))
mail.AddgestureRecognitor(tap4)
mail.isUserInteractionEnabled=true
fetchAvailableProducts()
}
func fetchAvailableProducts(){
让productIdentifiers=NSSet(对象:
“customLifePremium”//0
)
productsRequest=SKProductsRequest(productIdentifiers:productIdentifiers as!Set)
productsRequest.delegate=self
productsRequest.start()
}
func productsRequest(uRequest:SKProductsRequest,didReceive response:SKProductsResponse){
如果(response.products.count>0){
validProducts=response.products
让prod100coins=response.products[0]作为SKProduct
打印(“第一个产品:+prod100coins.本地化描述)
buyBtn.isHidden=false
}
}
/*func paymentQueue(queue:SKPaymentQueue,shouldAddStorePayment付款:SKPayment,对于产品:SKProduct)->Bool{
返回真值
}*/
func canMakePurchases()->Bool{return SKPaymentQueue.canMakePayments()}
func purchaseMyProduct(产品:SKProduct){
如果self.canMakePurchases(){
let payment=SKPayment(产品:产品)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(付款)
}else{print(“在您的设备中禁用购买!”)}
}
func paymentQueue(queue:SKPaymentQueue,updatedTransactions事务:[SKPaymentTransaction]){
对于事务:事务中的任何对象{
如果让交易:SKPaymentTransaction=交易为?SKPaymentTransaction{
开关trans.transactionState{
案例。购买:
SKPaymentQueue.default().finishTransaction(事务为!SKPaymentTransaction)
UserDefaults.standard.set(true,forKey:“premiumUser”)
UserDefaults.standard.set(false,forKey:“limitedVersion”)
打破
案例。失败:
SKPaymentQueue.default().finishTransaction(事务为!SKPaymentTransaction)
打印(“付款失败”)
打破
案件.恢复:
SKPaymentQueue.default().finishTransaction(事务为!SKPaymentTransaction)
打印(“购买已成功恢复!”)
UserDefaults.standard.set(true,forKey:“premiumUser”)
UserDefaults.standard.set(false,forKey:“limitedVersion”)
打破
默认值:中断
}}}
}
func restorepourchase(){
SKPaymentQueue.default().add(以SKPaymentTransactionObserver的身份添加)
SKPaymentQueue.default().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(队列:SKPaymentQueue){
打印(“付款成功!”)
}
覆盖函数视图将出现(uo动画:Bool){
setGradientBackground()
超级。视图将显示(动画)
}
@iAction func RestoreC(\发送方:任意){
恢复采购()
}
@IBAction func buyCC(\发送方:任何){
productIndex=0
purchaseMyProduct(有效产品[productIndex])
}
@objc func tappedMe5()
{
如果MFMailComposeViewController.canSendMail(){
让mail=MFMailComposeViewController()
mail.mailComposeDelegate=self
mail.setToRecipients([“dfmv。enterprise@gmail.com"])
mail.setSubject(“”)
mail.setMessageBody(“,isHTML:true)
当前(邮件,动画:真)
}否则{
let alert=UIAlertController(标题:NSLocalizedString(“信息”,注释:”),消息:NSLocalizedString(“noClientMail”,注释:”),首选样式:UIAlertController.Style.alert)
警惕