---
# System prepended metadata

title: Android 廣告提供設計思維

---

# Android 廣告提供設計思維

宗旨：由此去分配廣告由哪個平台提供


## 類的定義

AdProvider：廣告供應商的類型，目前有 Google、Facebook 的廣告提供類型

AdType：廣告的類型，目前有 Interstitial、Banner 的廣告類型

AdObject：各類廣告的基礎接口
- InterstitialAd：插頁廣告
    - showAd()：
    - loadAd()
- BannerAd：橫幅廣告

AbstractAbFactory：統籌供應商能提供的各式廣告類型，例：橫幅、插頁廣告
- GoogleAdFactory
- FacebookAdFactory

AdListener：監聽廣告的各式行為

AdManager：對外的溝通的唯一窗口


## 設計思維

一、

使用抽象工廠模式，設計出各個廣告平台的廣告工廠   

創建 GoogleAdFactory、FacebookAdFactory，繼承於 AbstractAbFactory，並實現抽象方法`providerInterstitialAd`、`providerBannerAd`
，分別為創建插頁廣告及橫幅廣告


二、
    
再由給定的廣告呈現類型實例化廣告物件



## 注意

- [x] 1. 使用插頁廣告，不需要將 Ad 設定到哪個頁面內，但橫幅廣告需要設定顯示的位置
    解決方案：
    - 傳入 ViewGroup，當廣告加載完成，便將廣告添加至 ViewGroup 內
    
    
- [ ] 2. 插頁廣告復用，不能二次調用 show()，需重新調用 loadAd() 重新加載廣告
    - Facebook 
        - 當插頁廣告加載完成；isAdLoaded = true , isAdInvalidated = false
        - 顯示插頁廣告後，再次調用 show()；isAdLoaded = false , isAdInvalidated = true
    - Google 
        - 當插頁廣吿加載完成；isLoaded = true
        - 顯示插頁廣告後，再次調用 show()；isLoaded = false
            
            
    - 結論：當插頁廣告顯示過後，已加載完成的廣告隨之無效；若需要重新顯示插頁廣告，則需重新調用 loadAd()
    
    - 解決方案：當需要顯示插頁廣告，判斷 isLoaded()
        - true：顯示插頁廣告
        - false：加載廣告
- [ ] 3.  橫幅廣告重新加載
    - Google
        - 當廣告已經顯示，調用 show() 將不起任何作用
        - 當廣告已經顯示，再次調用 loadAd()，將重新加載廣告

     - Facebook
         - 當廣告已經顯示，調用 show() 將不起任何作用
         - 當廣告已經顯示，再次調用 loadAd()，將重新加載廣告

    - 結論：當廣告已經加載成功，重新加載再次調用 loadAd()

            
## 未來展望

1. ~~目前僅只有設定同一個 廣告版位的 id，需提供給用戶設置 id~~
2. ~~提供全域設置 google、facebook 平台的 id~~
    - 只能在 Androidmanifest 設定
3. ~~提供用戶可以設置監聽，掌握廣告的狀況~~
4. ~~使廣告可以被復用~~


AdSize

AdSiez.Small


### Facebook
  public static final AdSize INTERSTITIAL = new AdSize(100);
    public static final AdSize BANNER_HEIGHT_50 = new AdSize(5);
    public static final AdSize BANNER_HEIGHT_90 = new AdSize(6);
    public static final AdSize RECTANGLE_HEIGHT_250 = new AdSize(7);
    
    
    
    
    
### Google
public static final AdSize BANNER = new AdSize(320, 50, "320x50_mb");
public static final AdSize FULL_BANNER = new AdSize(468, 60, "468x60_as");
public static final AdSize LARGE_BANNER = new AdSize(320, 100, "320x100_as");
public static final AdSize LEADERBOARD = new AdSize(728, 90, "728x90_as");
public static final AdSize MEDIUM_RECTANGLE = new AdSize(300, 250, "300x250_as");
public static final AdSize WIDE_SKYSCRAPER = new AdSize(160, 600, "160x600_as");
public static final AdSize SMART_BANNER = new AdSize(-1, -2, "smart_banner");