2023-10-20
公式ではsudo gem install cocoapodsとあるが、当方環境では配下のツールのバージョンエラーがどうたらでうまくインストールできなかった。
なので、HomeBrewを使う方法でインストールした。
brew install cocoapods
最後に/usr/local/binにシンボリックリンクを貼るところでエラーが発生したので、手動でリンクを貼る。
cd /usr/local/bin ln -s /usr/local/Cellar/cocoapods/1.13.0/bin/pod
これでpodコマンドが使えるようになった。
pod --version 1.13.0
Podfileを作成するにはProjectName.xcodeprojがあるフォルダでpod initを実行する。xcodeprojフォルダの中では無いので注意。
cd MyProject ls -alF MyProject MyProject.xcodeproj # ここで実行 pod init
Google Moble SDKをPodfileに追加する
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0' platform :ios, '14.0' target 'MyProject' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for MyProject pod 'Google-Mobile-Ads-SDK' end post_install do | installer | installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0' end end end
ここで、このプロジェクトはiOS Deployment Target を14.0にしているので、上記のiOSの箇所もコメントアウトを外して14.0に設定している。またそれをした場合、インストール後のライブラリのターゲット設定も14にしないと警告が出まくるので、post_installで自動設定するようにした。
プロジェクトにインストールする
pod install --repo-update Updating local specs repositories Analyzing dependencies Downloading dependencies Generating Pods project Integrating client project Pod installation complete! There is 1 dependency from the Podfile and 6 total pods installed.
Xcodeでプロジェクトを開く。ProjectName.xcworkspaceファイルをダブルクリックしないとAdMobを認識しないので注意!!
Info.plistを手動編集する
左ペインの「Info」を右クリック→Open As→Source Codeで開く。
<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>GADApplicationIdentifier</key> <string>ca-app-pub-3940256099942544~1458002511</string> <key>SKAdNetworkItems</key> <array> <dict> <key>SKAdNetworkIdentifier</key> <string>cstr6suwn9.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>p78axxw29g.skadnetwork</string> </dict> </array> <key>GADIsAdManagerApp</key> <true></true> </dict> </plist>
テスト広告を表示するだけなら↑ページサンプルそのままで良いらしい。本番はca-app-pub-が自分のものに差し替え。
ビルド前にワーニングをつぶす。ほとんどが、iOS Deployment Targetが合っていないぞ、というもの。エラーをクリックして該当箇所に飛んで、プロジェクト本体のDeployment Targetとバージョンを合わせる。5箇所くらいなはず。
Swift UIでAdMobバナー広告および全画面広告を表示するサンプルを書く。
メイン関数ファイルに、以下AdMobの初期化コードを書く。
Swift | AdMobApp.swift | GitHub Source |
// // AdMobApp.swift // AdMob // Created by ServerNote.NET on 2023/09/18. // import SwiftUI import GoogleMobileAds class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { GADMobileAds.sharedInstance().start(completionHandler: nil) return true } } @main struct AdMobApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { AdMobView() } } }
そして以下がメインビュー。AdMobBannerViewを常時表示、そしてその下のTextをタップするとAdMobScreenViewを起動し全画面広告を表示する。showAdObjectの都度loadAdObjectしているのがポイント。こうしないと2回目以降エラーになる。
Swift | AdMobView.swift | GitHub Source |
// // AdMobView.swift // AdMob // Created by ServerNote.NET on 2023/10/19. // import SwiftUI import GoogleMobileAds struct AdMobBannerView : UIViewControllerRepresentable { func makeUIViewController(context: Context) -> some UIViewController { let view = GADBannerView(adSize: GADAdSizeBanner) let viewController = UIViewController() view.adUnitID = "ca-app-pub-3940256099942544/2934735716" view.rootViewController = viewController view.load(GADRequest()) viewController.view.addSubview(view) viewController.view.frame = CGRect(origin: .zero, size: GADAdSizeBanner.size) return viewController } func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { } } class AdMobScreenView: NSObject, ObservableObject, GADFullScreenContentDelegate { static var shared = AdMobScreenView() var adObject:GADInterstitialAd? override init() { adObject = nil super.init() } func loadAdObject() { GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest()) { (ad, error) in if let _ = error { print("AdMobScreenView.loadAdObject error=\(error!)") return } print("AdMobScreenView.loadAdObject success") self.adObject = ad self.adObject?.fullScreenContentDelegate = self } } func showAdObject() { self.loadAdObject() let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene let root = windowScene?.windows.first!.rootViewController self.adObject?.present(fromRootViewController: root!) } func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) { print("AdMobScreenView.didFailToPresentFullScreenContentWithError") } func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("AdMobScreenView.adWillPresentFullScreenContent") } func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("AdMobScreenView.adDidDismissFullScreenContent") } } struct AdMobView: View { @ObservedObject var adScreen = AdMobScreenView.shared var body: some View { VStack() { AdMobBannerView().frame(width: 320, height: 50) Text("Tap to open full screen AD") .font(.largeTitle) .onAppear() { adScreen.loadAdObject() } .onTapGesture { adScreen.showAdObject() } } } } struct AdMobView_Previews: PreviewProvider { static var previews: some View { AdMobView() } }
SDKに変更があったら随時更新します。お疲れ様でした。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Intel Macbook2020にBootCampで入れたWindows11 Pro 23H2のBluetoothを復活させる
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
【Apache】サーバーに同時接続可能なクライアント数を調整する
Windows版Google Driveが使用中と言われアンインストールできない場合
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
cannot guess build type; you must specify oneと言われた場合
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
Pythonで処理にかかった時間を計測するには