# 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");