AdReward от AdColony по какой-то причине не работает на Swift 2.0
Я хотел бы внедрить поощрительную вставку в мою игру, но я получаю много ошибок AdColony, таких как: "Заполнение для запроса объявления отсутствует" или мой идентификатор зоны недействителен.
Начнем с того, как я настроил свою зону AdColony:
Zone is active? Yes
Zone Type: Preroll/Interstitial (Gives me "No fill for ad request error")
Value Exchange/V4VC (Gives me "Zone ID invalid, please check config error")
House Ads: Back Fill
Options: 0 0 1
Development: Show Test Ads Only (Although my app is currently Live)
Пример, который они дают вам при загрузке SDK, относится к приложениям, а не к играм, поэтому я попытался перевести его для игр, хотя это не так уж и отличается, но может быть проблема с моим текущим кодом. Так вот как у меня это в моем GameViewController.swift.
// Outside I declare a struct
struct Constants
{
static let adColonyAppID = "app5aab6bb6aaf3xxxxxx"
static let adColonyZoneID = "vz19959f95bd62xxxxxx"
static let currencyBalance = "coinAmount"
}
// Inside GameViewController
var ad: AdColonyInterstitial?!
var spinner: UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
self.setupAdRewardBanner()
}
func setupAdRewardBanner() {
AdColony.configureWithAppID(Constants.adColonyAppID, zoneIDs: [Constants.adColonyZoneID], options: nil,
completion: {(zones) in
let zone = zones.first
zone?.setReward({ (success, name, amount) in
if (success) {
let storage = NSUserDefaults.standardUserDefaults()
let wrappedBalance = storage.objectForKey(Constants.currencyBalance)
var balance = 0
if let nonNilNumWrappedBalance = wrappedBalance as? NSNumber {
balance = Int(nonNilNumWrappedBalance.integerValue)
}
balance = balance + Int(amount)
let newBalance: NSNumber = NSNumber(integerLiteral: balance)
storage.setValue(newBalance, forKey: Constants.currencyBalance)
storage.synchronize()
self.updateCurrencyBalance()
}
})
//If the application has been inactive for a while, our ad might have expired so let's add a check for a nil ad object
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(GameViewController.onBecameActive), name: "onBecameActive", object: nil)
//AdColony has finished configuring, so let's request an interstitial ad
self.requestInterstitial()
})
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(GameViewController.triggerAdReward), name: "triggerAdReward", object: nil)
self.updateCurrencyBalance()
}
func requestInterstitial()
{
//Request an interstitial ad from AdColony
AdColony.requestInterstitialInZone(Constants.adColonyZoneID, options:nil,
//Handler for successful ad requests
success:{(newAd) in
//Once the ad has finished, set the loading state and request a new interstitial
newAd.setClose({
self.requestInterstitial()
})
//Interstitials can expire, so we need to handle that event also
newAd.setExpire( {
self.ad = nil
self.requestInterstitial()
})
//Store a reference to the returned interstitial object
self.ad = newAd
},
//Handler for failed ad requests
failure:{(error) in
NSLog("SAMPLE_APP: Request failed with error: " + error.localizedDescription + " and suggestion: " + error.localizedRecoverySuggestion!)
}
)
}
func triggerAdReward(sender: AnyObject)
{
if let ad = self.ad {
if (!ad!.expired) {
ad?.showWithPresentingViewController(self)
}
}
}
func updateCurrencyBalance()
{
//Get currency balance from persistent storage and display it
let storage = NSUserDefaults.standardUserDefaults()
let wrappedBalance = storage.objectForKey(Constants.currencyBalance)
var balance: Int = 0
if let nonNilNumWrappedBalance = wrappedBalance as? NSNumber {
balance = Int(nonNilNumWrappedBalance.integerValue)
}
print("current balance ", balance)
//XXX Run animation of giving user coins and update view
}
func onBecameActive()
{
//If our ad has expired, request a new interstitial
if (self.ad == nil) {
self.requestInterstitial()
}
}
И после всего этого я вызываю это уведомление, чтобы запросить рекламное объявление при нажатии кнопки после того, как пользователь проигрывает в GameScene.
NSNotificationCenter.defaultCenter().postNotificationName("triggerAdReward", object: nil)
Я попытался отладить, я не могу видеть, как код попадает внутрь if (success)
блок. Так что там может быть проблема.
Кто-нибудь знает, что я делаю не так?
После отладки я заметил, что этот метод не продвигается
self.requestInterstitial()
Так может быть проблема с моей учетной записью, может быть? Почему не проходит через успех и проходит через блок ошибок?
Ошибка в консоли:
SAMPLE_APP: запрос не выполнен с ошибкой: заполнение для запроса объявления и предложения отсутствует: убедитесь, что вы правильно настроили свою зону на панели управления: http://clients.adcolony.com/.
Заранее спасибо.
1 ответ
- Кажется, ваш код должен работать.
Поскольку вы хотите внедрить промежуточную награду, вы должны установить тип зоны V4VC.
В случае, если он сказал
"Zone ID invalid, please check config error"
необходимо дважды проверить идентификатор приложения и идентификатор зоны в исходном коде и на странице панели клиента Adcolony.После того, как вы изменили тип зоны, подождите некоторое время (10 минут?) Для проверки, серверу нужно время для синхронизации состояния.
Тест на устройстве вместо симулятора, если это возможно.
Вот документ для v4vc: https://github.com/AdColony/AdColony-iOS-SDK-3/wiki/Rewarded-Interstitial-Ads-Quick-Start-Guide