Google AdMob 干扰 SwiftUI 中的摇动手势

Posted

技术标签:

【中文标题】Google AdMob 干扰 SwiftUI 中的摇动手势【英文标题】:Google AdMob interfering with Shake Gesture in SwiftUI 【发布时间】:2020-04-05 21:34:11 【问题描述】:

我有一个内置 SwiftUI 的应用程序,它使用摇动手势,在整个开发过程中运行良好。今天我使用 AdMob 成功添加了一个横幅广告。但是,这样做似乎会阻止“摇动手势”工作。单独工作的 AdMob 和 Shake Gesture 代码如下所示。

AdMob 横幅广告的调用方式如下:

final private class BannerVC: UIViewControllerRepresentable  

    let bannerID = “my-BannerAd-Unit-ID-here“

    func makeUIViewController(context: Context) -> UIViewController 
        let view = GADBannerView(adSize: kGADAdSizeBanner)

        let viewController = UIViewController()
        view.adUnitID = bannerID
        view.rootViewController = viewController
        viewController.view.addSubview(view)
        viewController.view.frame = CGRect(origin: .zero, size: kGADAdSizeBanner.size)
        view.load(GADRequest())

        return viewController
    

    func updateUIViewController(_ uiViewController: UIViewController, context: Context) 




struct BannerAdView: View 
    var body: some View 
//        Text("Hello, World!")

        HStack
            Spacer()
            BannerVC().frame(width: 320, height: 50, alignment: .center)
            Spacer()
        

    

在 BannerAdView 中,如果我注释掉 BannerVC 调用并将其替换为“Hello World”文本,则摇动手势可以正常工作。当我注释掉“Hello World”并替换为 BannerVC 调用(如上所示)时,Shake Gesture 不再起作用。因此,干扰似乎来自 BannerVC 类代码。

知道为什么吗?以下是摇动手势的工作代码:

struct ShakableViewRepresentable: UIViewControllerRepresentable 

    class Coordinator: NSObject 
        var parent: ShakableViewRepresentable
        init(_ parent: ShakableViewRepresentable) 
            self.parent = parent
        
    

    func makeCoordinator() -> ShakableViewRepresentable.Coordinator 
        Coordinator(self)
    

    func makeUIViewController(context: Context) -> ShakableViewController 
        ShakableViewController()
    

    func updateUIViewController(_ uiViewController: ShakableViewController, context: Context) 


class ShakableViewController: UIViewController 

    override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) 
        guard motion == .motionShake else  return 
        shuffleItems(newGame: false)
    

【问题讨论】:

【参考方案1】:

因此,问题与 AdMob 无关。相反,该错误是由于我的堆栈中有两个 UIViewController(一个用于振动器,一个用于 AdMob)。一旦我解决了这个问题,它就完美地工作了。

【讨论】:

以上是关于Google AdMob 干扰 SwiftUI 中的摇动手势的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中的 Google AdMob 横幅事件集成

Google Admob 横幅广告在 swiftui 中不起作用

AdMob/Firebase 使用 cocoapods 与 SwiftUI 集成:发现意外的 Mach-O 标头代码:0x72613c21

SwiftUI UserDefaults 干扰 Firebase Firestore 数据

AdMob + 内容显示缓慢 + Google DFP

Google Play 服务 9.2.0 (Admob) 的 NoClassDefFoundError