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を使ってみた