非表示消耗型(バナー広告を排除)を実装したいのですが、ユーザーが購入したかを判断するのにcountを使っていたのですが、複数画面に反映すると処理が重くなってフリーズします。  
皆さんは購入後の判定をどのようしてるのかやアドバイス知りたいです。  
開発言語：swift  
広告:AdMob

**ViewController**

```

    import UIKit
    import GoogleMobileAds
    
    class ViewController: UIViewController,GADBannerViewDelegate,CatchProtcol {
      
    
        @IBOutlet weak var bannerView: GADBannerView!
      
        override func viewDidLoad() {
            super.viewDidLoad()
    
        }
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            
            //もしbuyというキー値に1という数字が入っていたら
            //購入済み = 広告を排除
            
            if let buy = UserDefaults.standard.object(forKey: "buy"){
                  let count  = UserDefaults.standard.object(forKey: "buy") as! Int
                if count == 1{
                    
                    bannerView.removeFromSuperview()
                    
                }else{
                    
                }
                
                
            }else{
                
                //広告を設定していく
                bannerView.adUnitID = "広告ID"
                bannerView.rootViewController = self
                bannerView.load(GADRequest())
                
            }
            
        }
       
        
        func catchData(count: Int) {
              
            if count == 1 {
                
                bannerView.removeFromSuperview()
            }
            
        }
          
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            
            let adRemoveVC = segue.destination as! AdRemoveViewController
            adRemoveVC.delegate = self
            
        }        
    
```

**AdRemoveViewController**

```

    import UIKit
    import SwiftyStoreKit
    
    
    protocol CatchProtcol {
        
        func catchData(count:Int)
        
    }
    
    class AdRemoveViewController: UIViewController {
    
        @IBOutlet weak var removeButton: UIButton!
        @IBOutlet weak var restoreButton: UIButton!
        
        
        var delegate:CatchProtcol?
        
        var count:Int = 0
        
        override func viewDidLoad() {
            super.viewDidLoad()
        }
       
        
        @IBAction func removeAdAction(_ sender: Any) {
            
            purchase(PRODUCT_ID: " 　　")
        }
        
        
        
        func purchase(PRODUCT_ID:String){
               
               SwiftyStoreKit.purchaseProduct(PRODUCT_ID) { (result) in
                   
                   switch result{
                       
                   case .success(_):
                       
                      //ここに書く
                       //購入が成功したとき
                       
                       if let buy = UserDefaults.standard.object(forKey: "buy"){
                           let count = UserDefaults.standard.object(forKey: "buy") as! Int
                  
           }else{
                               
                           self.count = 1
                           UserDefaults.standard.set(1, forKey: "buy")
                       }
                       
                       
                       self.verifyPurchase(PRODUCT_ID:PRODUCT_ID)
                      
                       self.delegate?.catchData(count: self.count)
                       self.dismiss(animated: true, completion: nil)
                       
                       break
                   case .error(let error):
                       print(error)
                       
                       break
                   }
                   
                   
               }
               
               
           }
        
        func verifyPurchase(PRODUCT_ID:String){
            //共有シークレット リストア
            let appeValidator = AppleReceiptValidator(service: .production, sharedSecret: "  ")
            SwiftyStoreKit.verifyReceipt(using: appeValidator) { (result) in
                
                switch result{
                case .success(let receipt):
                    let purchaseResult = SwiftyStoreKit.verifyPurchase(productId: PRODUCT_ID, inReceipt: receipt)
                    switch purchaseResult{
                    case.purchased:
                        //リストア成功
                        self.count = 1
                        UserDefaults.standard.set(1, forKey: "buy")
                        break
                    case .notPurchased:
                        //リストアされていない場合
                        
                        UserDefaults.standard.set(nil, forKey: "buy")
                        break
                        
                    }
                case .error(let error):
                    break
                }
                
            }
            
            
        }
    
        
        @IBAction func restore(_ sender: Any) {
            
            //リストア機能
                 
                 SwiftyStoreKit.restorePurchases { (results) in
                     if results.restoreFailedPurchases.count > 0{
                        //リストア失敗
                         
                     }else if results.restoredPurchases.count > 0{
                         //リストア成功
                         UserDefaults.standard.set(1, forKey: "buy")
                         self.count =  1
                         self.dismiss(animated: true, completion: nil)
                     }else{
                         
                         //リストアするものがない
                     }
                 }
            
        }
        
        
        
    }
    
```
CC BY-SA 4.0
2022-10-19T01:03:51.230
91673
2022-10-19T01:03:51.230
54896
question
swift xcode admob
Swift 広告排除について