应用内购买:移除广告横幅&非页内广告 - 代码协助

时间:2016-02-09 09:34:41

标签: ios swift in-app-purchase iad interstitial

我有一个简单的单一视图应用程序项目 - 一(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

但它显然不起作用。

问题:

  1. 如何修改我的代码并停止展示这些广告横幅?
  2. 我如何同时阻止我的插页式广告展示?

    我觉得我很近,非常接近......但是那雪茄还没落地!

2 个答案:

答案 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中设置状态并相应地更新用户界面。