У меня проблема с покупками In-App на iOS. У меня есть 5 покупок в приложении в игре, все из которых работают точно так, как ожидалось, когда тестировались на iPhone 6 (iOS 8.3). Когда я иду тестировать iPad Air 2 (iOS 8.2), все IAP немедленно сбой. Кто-нибудь еще испытал эту проблему? Есть ли какой-то код, специфичный для iPad, который я должен добавить?In-App Purchase работает на iPhone, но не iPad
EDIT: Странно, обновление iPad до iOS 8.3 устраняет проблему. Любые идеи относительно того, почему этот вопрос возникает? Должен ли я изменить свое приложение, чтобы поддерживать только iOS 8.3 и выше?
Чтобы проверить приложение, я использую TestFlight, то же сетевое подключение и тот же Apple ID.
код я использую для In-App покупки ниже:
func inApp() {
if (SKPaymentQueue.canMakePayments())
{
var productID:NSSet = NSSet(object: product_id);
var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>);
productsRequest.delegate = self;
productsRequest.start();
}else{
displayAlert()
}
}
func buyProduct(product: SKProduct){
var payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment);
}
func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
var count : Int = response.products.count
if (count>0) {
var validProducts = response.products
var validProduct: SKProduct = response.products[0] as! SKProduct
if (validProduct.productIdentifier == product_id) {
println(validProduct.localizedTitle)
println(validProduct.localizedDescription)
println(validProduct.price)
buyProduct(validProduct);
} else {
println(validProduct.productIdentifier)
}
} else {
displayAlert()
}
}
func request(request: SKRequest!, didFailWithError error: NSError!) {
self.displayAlert()
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Purchased:
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
if product_id == "com.shv.FrenzyTenLives" {
defaults.setInteger(10, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyFiveLives" {
defaults.setInteger(5, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyInfiniteLives" {
defaults.setBool(true, forKey: "infiniteLives")
} else if product_id == "com.shv.FrenzyShield" {
defaults.setInteger(5, forKey: "shieldValue")
} else if product_id == "com.shv.FrenzyRemoveAds" {
defaults.setBool(true, forKey: "adsRemoved")
adBanner.hidden = true
}
break;
case .Failed:
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
self.displayAlert()
break;
case .Restored:
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
if product_id == "com.shv.FrenzyTenLives" {
defaults.setInteger(10, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyFiveLives" {
defaults.setInteger(5, forKey: "totalLives")
} else if product_id == "com.shv.FrenzyInfiniteLives" {
defaults.setBool(true, forKey: "infiniteLives")
} else if product_id == "com.shv.FrenzyRemoveAds" {
defaults.setBool(true, forKey: "adsRemoved")
adBanner.hidden = true
}
break;
default:
break;
}
}
}
}
использовать песочницы тестеры ли? Используете ли вы ту же учетную запись на своих устройствах? – Krivoblotsky
Определите «сбой немедленно». Показывать коды или сообщения об ошибках (или и то, и другое). Подтвердите, что у устройства есть доступ к сети, правильные входные данные для песочницы (как указано @ Кривоблоцким) и т. Д. –
Я обновил вопрос, включив код и ответ на вопрос @ Кривоблоцкого. –