SwiftUIを本格的に導入始めたマスタカです
今回はadmobを使ってみた
・基本的なやり方
これに沿ってやれば基本的に動く
UIKit経由だとこうやってラップしないといけないんだね
https://qiita.com/hyuga_amazia/items/d8b39b4292bfccb853ef
・エミューレーターで動かす
func makeUIViewController(context: Context) -> some UIViewController {
let bannerViewController = BannerViewController()
bannerView.adUnitID = adUnitID
bannerView.rootViewController = bannerViewController
bannerViewController.view.addSubview(bannerView)
bannerViewController.delegate = context.coordinator
#if DEBUG
GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [GADSimulatorID]
#endif
return bannerViewController
}
・Admob表示時にpaddingを入れる
表示時に位置を変える等やるならこのようにやる
ちなみにhideするとそもそもローディング処理が走らないっていうバグにハマるので注意
struct BannerView: UIViewControllerRepresentable {
@Binding var isAd: Bool
@Binding var adHeight: CGFloat
// MARK: - GADBannerViewDelegate
func bannerViewDidReceiveAd(_ bannerView: GADBannerView) {
self.parent.adHeight = bannerView.adSize.size.height
self.parent.isAd = true
}
func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: Error) {
self.parent.isAd = false
}
}
struct Ad: View {
@State var isAd = false
@State var height:CGFloat = 0.0
var body: some View {
let bottom = isAd ? height : 0
BannerView(isAd: $isAd, adHeight: $height)
.padding(.bottom, CGFloat(bottom))
}
}
関連記事:
- iOSのFirebase7系から8系に移行した
- androidでDataBinding + ViewModel + LiveDataで双方向Bindingしてみた
- androidでDataBinding + ViewModel + LiveDataを使ってみた