AdColony的AdReward由于某种原因不能在Swift 2.0上工作



我想在我的游戏中执行奖励插播广告,但我得到了很多AdColony错误,如:"No fill for ad request"或我的Zone ID无效。

开始,这将是我如何配置我的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.

  • 似乎你的代码应该工作。
  • 既然你想要执行奖励插页广告,你应该将区域类型设置为V4VC。

  • 如果它说"Zone ID invalid, please check config error",你应该检查两次应用程序id和区域id在源代码和Adcolony客户端面板页。

  • 更改区域类型后,等待一段时间(10分钟?)进行测试,服务器应该需要时间来同步状态

  • 如果可能,在设备上测试而不是模拟器。

下面是v4vc的文档:https://github.com/AdColony/AdColony-iOS-SDK-3/wiki/Rewarded-Interstitial-Ads-Quick-Start-Guide

相关内容

  • 没有找到相关文章

最新更新