我有一个简单的单一视图应用程序项目 - 一(1)页应用程序,向用户显示一些随机文本。
我已成功合并广告横幅广告和非页内广告。
我已设置另一个视图控制器(InAppViewController.swift
)来处理弹出式页面,该页面允许用户进行应用内购买以移除所有广告(AdBanners& InterstitialAds)。
在我的第二个视图控制器(InAppViewController.swift
)中,我有以下代码:
修订后的代码:
// InAppPViewController.swift
import UIKit
import StoreKit
import iAd
class InAppPViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {
let defaults = NSUserDefaults.standardUserDefaults()
var product_id: NSString?;
@IBOutlet weak var unlockAction: UIButton!
@IBOutlet var adBannerView: ADBannerView?
override func viewDidLoad() {
product_id = "holymoly.iap.removeads";
super.viewDidLoad()
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
//Check if product is purchased
if (defaults.boolForKey("purchased")){
self.adBannerView?.hidden = true
}
else if (!defaults.boolForKey("stonerPurchased")){
print("false")
self.adBannerView?.hidden = false
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func unlockAction(sender: AnyObject) {
print("About to fetch the products");
// We check that we are allow to make the purchase.
if (SKPaymentQueue.canMakePayments())
{
let productID:NSSet = NSSet(object: self.product_id!);
let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
productsRequest.delegate = self;
productsRequest.start();
print("Fething Products");
}else{
print("can't make purchases");
}
}
func buyProduct(product: SKProduct){
print("Sending the Payment Request to Apple");
let payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addPayment(payment);
}
//Delegate Methods for IAP
func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
let count : Int = response.products.count
if (count>0) {
let validProduct: SKProduct = response.products[0] as SKProduct
if (validProduct.productIdentifier == self.product_id) {
print(validProduct.localizedTitle)
print(validProduct.localizedDescription)
print(validProduct.price)
buyProduct(validProduct);
} else {
print(validProduct.productIdentifier)
}
} else {
print("nothing")
}
}
func request(request: SKRequest, didFailWithError error: NSError) {
print("Error Fetching product information");
}
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("Received Payment Transaction Response from Apple");
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Purchased:
print("Product Purchased");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
defaults.setBool(true , forKey: "purchased")
self.adBannerView?.hidden = true
break;
case .Failed:
print("Purchased Failed");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
self.adBannerView?.hidden = false
break;
case .Restored:
print("Already Purchased");
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
default:
self.adBannerView?.hidden = true
break;
}
}
}
}
}
在我原来的&#39; view controller(ViewController.swift
)我添加了这段代码:
// ViewController.swift
import UIKit
import MessageUI
import Social
import iAd
class ViewController: UIViewController, MFMailComposeViewControllerDelegate, MFMessageComposeViewControllerDelegate, ADBannerViewDelegate, ADInterstitialAdDelegate
{
var interstitialAd:ADInterstitialAd!
var interstitialAdView: UIView = UIView()
@IBOutlet var adBannerView: ADBannerView?
@IBAction func someFunkyButton(sender: AnyObject) {
//Interstitial Ad:
let rand = Int(arc4random_uniform(4))
print(rand)
let adNo = 2
if(adNo == rand)
{
loadInterstitialAd()
}
}
let defaults = NSUserDefaults.standardUserDefaults()
override func viewDidLoad() {
super.viewDidLoad()
//Check if product is purchased
if (defaults.boolForKey("purchased")){
// Advertising Banner:
self.canDisplayBannerAds = true
self.adBannerView?.delegate = self
self.adBannerView?.hidden = true
}
else if (!defaults.boolForKey("stonerPurchased")){
print("false")
// Advertising Banner:
self.canDisplayBannerAds = true
self.adBannerView?.delegate = self
self.adBannerView?.hidden = false
}
代码显示为无错误。
它在我的实际iPhone(模拟器)上运行,并且应用内购买工作。
但广告横幅仍然显示。我尝试显示广告横幅:
(i)在ViewController.swift中:
self.canDisplayBannerAds = true
self.adBannerView?.delegate = self
self.adBannerView?.hidden = false
(ii)在InAppViewController.swift中:
self.adBannerView?.hidden = false
和不显示广告横幅:
(i)在ViewController.swift中:
self.canDisplayBannerAds = true
self.adBannerView?.delegate = self
self.adBannerView?.hidden = true
(ii)在InAppViewController.swift中:
self.adBannerView?.hidden = true
但它显然不起作用。
问题:
我如何同时阻止我的插页式广告展示?
我觉得我很近,非常接近......但是那雪茄还没落地!
答案 0 :(得分:2)
如果您要实施自己的ADBannerView
,则需要删除self.canDisplayBannerAds = true
。
self.canDisplayBannerAds = true
可用于在您的应用中实施iAd横幅的无忧方式。这将为您创建ADBannerView
,并根据是否从iAd网络收到广告来显示或隐藏视图底部的ADBannerView
。
您要么实施自己的ADBannerView
,要么使用self.canDisplayBannerAds = true
,而不是两者。
答案 1 :(得分:1)
首先removeAds
位于btnRemoveAds
内,所以将其移到外面。其次,一种方法是在UserDefaults中保存所购买产品的产品标识符,以便在退出和启动应用程序时,自用户购买了inapp后,广告将不会显示。因此,您要对viewDidLoad
执行的操作是检查是否已购买产品标识符(来自NSUserDefaults
,如果之前已购买,则会设置),如果已购买,则禁用广告从其他位置展示广告。购买商品后,请在NSUserDefaults
中设置状态并相应地更新用户界面。