ios - 应用内购买 : Remove Ad Banners & Interstitial Ads - Code Assistance

标签 ios swift in-app-purchase iad interstitial

我有一个简单的单 View 应用程序项目 - 一个向用户显示一些随机文本的一 (1) 页应用程序。

我已成功合并广告横幅和插页式广告。

我设置了另一个 View Controller (InAppViewController.swift) 来处理弹出页面,该页面允许用户进行应用内购买以删除所有广告(AdBanners 和 InterstitialAds)。

在我的第二个 View Controller (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;
            }
        }
    }
    
}

}

在我的“原始” 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. 如何停止展示我的插页式广告?

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

最佳答案

如果您要实现自己的 ADBannerView,则需要删除 self.canDisplayBannerAds = true

self.canDisplayBannerAds = true 可用于在应用程序中轻松实现 iAd 横幅。这将为您创建一个 ADBannerView,并根据是否从 iAd 网络接收广告来显示或隐藏 View 底部的 ADBannerView

您可以实现自己的 ADBannerView 或使用 self.canDisplayBannerAds = true,但不能同时使用两者。

关于ios - 应用内购买 : Remove Ad Banners & Interstitial Ads - Code Assistance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35288379/

相关文章:

iphone - UINavigationController 问题

ios - GCKUICastButton 在生产中不可见

ios - 为 iOS 应用程序添加深色模式

ios - UITableViewCell 中的 UILabel 返回 nil

objective-c - 应用被拒绝。如何跟踪用户非续订订阅

ios - 非续订订阅是否需要还原按钮?

ios - Firebase 如何获取 NSDictionary 数据

objective-c - 保留核心基础属性(property)

iOS - 我们如何通过促销代码为应用内购买提供折扣?

ios - 如何使用 Ionic3 获取 iOS 13 WiFi SSID?