1. 程式人生 > >通過CocoaPod方式在ios平臺整合ADMob

通過CocoaPod方式在ios平臺整合ADMob

最初打算直接將admob的framework繼承到專案中去,喜聞樂見的出現了非常多的連結錯誤,由於admob支援通過admob整合,所以換成該方式整合進專案。關於CocoaPods網上有非常多的介紹,這裡就不再贅述了

通過Cocoapod整合Admob

1.安裝Cocoapod

如果已經安裝好了可以跳過這一部步

sudo gem install cocoapods

2.建立podfile

在xcode的專案根目錄下建立一個檔案,內容大致如下:

source ‘https://github.com/CocoaPods/Specs.git
platform :ios, ‘7.0’
pod ‘Google-Mobile-Ads-SDK’, ‘~> 7.5’

source:指定pod的下載源
platform:指定引入的工程使用平臺版本
pod:指定引入工程和工程的版本

3.下載關聯的庫

關閉剛才的xcode專案的視窗,在專案的同級目錄下,執行

pod update

pod update成功後,工程目錄下多出了xxx.xcworkspace, Podfile.lock,Pods幾個檔案或資料夾,使用Xcode開啟xxx.xcworkspace, 然後編譯

4.Admob部分api的使用

(1).初始化

//傳入的app-id為向google申請到的appid
[GADMobileAds configureWithApplicationID:@"app-id"];

(2).BannerAd的使用

BannerAd是一個小矩形的廣告區域,通常長期佔據著螢幕的某個位置

    _frame = frame;
    //建立檢視
    adBannerView = [[GADBannerView alloc] initWithFrame:CGRectMake(0,frame.size.height IADVIEWHEIGHT,frame.size.width, IADVIEWHEIGHT)];
    //設定橫幅廣告的id
    adBannerView.adUnitID = ADMOBID;
    adBannerView.rootViewController = controller;
    //設定代理物件,廣告的生命週期狀態更新時,會回掉到相應的方法
    [adBannerView setDelegate:self];
    //將檢視新增到場景
    [controller.view addSubview:adBannerView];
    [controller.view bringSubviewToFront:adBannerView];
    GADRequest *request = [GADRequest request];
    //開始請求廣告
    [adBannerView loadRequest:request];```

(3).InterstitialAd的使用

插頁廣告通常會需要一點載入時間(視訊廣告載入時間更長),所以分成了載入廣告,和播放廣告兩個步驟

    - (void)loadAdInterstitialView{
        adInterstitial =
        [[GADInterstitial alloc] initWithAdUnitID:@"interstitial-ad-id"];
        [adInterstitial setDelegate:self];
        GADRequest *request = [GADRequest request];
        // Request test ads on devices you specify. Your test device ID is printed to the console when
        // an ad request is made.
        request.testDevices = @[ kGADSimulatorID, @"test-device-id" ];
        [adInterstitial loadRequest:request];
    }
    - (void)showAdInterstitialView{
        if (adInterstitial.isReady) {
            [adInterstitial presentFromRootViewController:rootViewController];
        } else {
            NSLog(@"==================InterstitialAd is not ready");
        }
    }

(4).視訊廣告的使用

    - (void)loadAdRewardedVideo{
        [GADRewardBasedVideoAd sharedInstance].delegate = self;
        if(![[GADRewardBasedVideoAd sharedInstance] isReady]){
            NSLog(@"==================Appcontroller loadAdRewardedVideo");
            GADRequest *request = [GADRequest request];
            request.testDevices = @[ kGADSimulatorID, @"test-device-id" ];
            [[GADRewardBasedVideoAd sharedInstance] loadRequest:request
                                                   withAdUnitID:@"rewarded-ad-id"];
        }else{
    //        [self loadAdRewardedVideo:block];
        }
    }
    - (void)showAdRewardedVideo{
        if([[GADRewardBasedVideoAd sharedInstance] isReady]){
            [[GADRewardBasedVideoAd sharedInstance] presentFromRootViewController:rootViewController];
        }else{
            [self loadAdRewardedVideo];
            NSLog(@"=================RewardedVideo is not ready");
        }
    }

5.以下是我在整合的時候遇到的一些問題

(1). 在編譯時,報錯:library not found for -lPods,做了以下嘗試

1.新增pod的search path
FrameWork Search Path:”{PODS_ROOT}/Google-Mobile-Ads-SDK/Frameworks/frameworks”
Header Search Path:”${PODS_ROOT}/Headers/Public”,”{PODS_ROOT}/Headers/Public/Google-Mobile-Ads-SDK”

2.新增Runpath Search Path:@executable_path/Frameworks (好像沒用)

3.Product-Scheme-Edit Scheme-Build-點選+號新增Pod的工程
然後步驟4的報錯沒有了,變成另外的錯誤,是由於引入的Pod工程Architecture的問題,最後在Build Setting中,
將Build Active Architecture Only 設定為true,編譯通過

(2)[email protected] module_name 這種方式不支援c++,oc混編

1.將引入方式改為#import

(3).Objective-C中的block使用

在block中不能隨意修改上下文中的變數,被修改的變數需要用__block進行修飾,否則會造成崩潰

(4).如何通過C++程式碼控制廣告的表現

由於專案的原因,不能將Admob的相關程式碼直接寫在.mm檔案中,所以只好專門建立一個m實現一個單利類,實現Admob的邏輯,然後再建立一個mm建立一個c++類,對前面所說的單利進行引用,最後在cpp檔案中引用mm的標頭檔案,實現對廣告表現的控制(有點繞,還專門寫一個類來橋接,不過水平有限,暫時沒想到好的辦法)

相關推薦

通過CocoaPod方式ios平臺整合ADMob

最初打算直接將admob的framework繼承到專案中去,喜聞樂見的出現了非常多的連結錯誤,由於admob支援通過admob整合,所以換成該方式整合進專案。關於CocoaPods網上有非常多的介紹,這裡就不再贅述了 通過Cocoapod整合Admob

spring mvc+mybatis ios android整合cms內容發布平臺

減少 連接 jquer 登錄 jdk版本 sso href com 分享圖片 開發語言: java、ios、android 部署平臺: linux、window jdk版本:JDK1.7以上版本 開發工具: eclipse、idea等 服務器中間件:Tomcat

iOS開發之如何通過路由方式進行頁面間的跳轉

在你的開發過程中,是否遇到過如下的需求: 在tableView型別的展示列表中,點選每個cell中人物頭像都可以跳轉到人物詳情,可參見微博中的頭像,同理包括轉發、評論按鈕、各種連結及linkcard。 跳轉到任意頁面 產品要求,某個頁面的不同banner圖,點選可以跳轉

IOS--通過程式碼方式使用AutoLayout (NSLayoutConstraint + Masonry)

隨著iPhone6/6+裝置的上市,如何讓手頭上的APP適配多種機型多種螢幕尺寸變得尤為迫切和必要。(包括:iPhone4/4s,iPhone5/5s,iPhone6/6s,iPhone 6p/6ps,iPhone7,iPhone 7p)。 在iPhone6出

IOS開發通過程式碼方式使用AutoLayout (NSLayoutConstraint + Masonry)

        隨著iPhone6/6+裝置的上市,如何讓手頭上的APP適配多種機型多種螢幕尺寸變得尤為迫切和必要。(包括:iPhone4/4s,iPhone5/5s,iPhone6/6s,iPhon

解決iOS app整合分享到QQ空間,微信好友,朋友圈等功能,蘋果稽核無法通過的問題

最近在提交應用到App Store時,因為App整合QQ登入,分享到QQ空間、微信等功能,而被拒,十分鬱悶;百思之下,想到一個辦法,可以解決此問題。 在將要顯示分享平臺列表時,根據判斷當前裝置是否安裝了某款App,而進行動態調整,具體操作如下: 首先匯入相關標頭檔案 #

Python 編寫通過post方式提交的接口測試代碼

urlencode nco 出現 第一次用 python 方式 pen 沒有 iterable 第一次用python編寫程序 是照著視頻裏編寫的 但是期間也出現了很多錯誤 視頻內用了是Python2 版本的 而我的是python 3版本的 寫這兩程序時就發現有很多不同

MySQL,Oracle,PostgreSQL通過web方式管理維護, 提高開發及運維效率

數據庫管理系統 遠程服務 .com gre ava window 開發 功能 mss 在開發及項目運維中,對數據庫的操作大家目前都是使用客戶端工具進行操作,例如MySQL的客戶端工具navicat,Oracle的客戶端工具 PL/SQL Developer

[iOS]FFmpeg框架在iOS平臺上的編譯和使用

_id hex ips selector 文件 str content pat tps 使用環境 Mac OS Yosemite 10.10.5 開發工具 Xcode 7.0 Terminal 需要的文件鏈接 gas-preprocessor yasm F

mysql通過GTID方式主從復制

border -c courier gtid mode mon init uri 用戶 1、 創建復制用戶,具有replication slave 權限,能保證slave把master的數據同步過去 master: #grant replication slave o

HttpClient通過Post方式發送Json數據

傳參數 alert pat gets oar source 內容 {} 訂單 轉載:http://blog.csdn.net/majian_1987/article/details/47728769 服務器用的是Springmvc,接口內容: [java] view

在aliyun主機上通過yum方式安裝Percona版MYSQL 5.7

linux aliyun mysql Aliyun主機環境:CPU:1C MEM:2G OS:centos 6.8 1、安裝percona軟件包源yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4

spring boot框架學習學前掌握之重要註解(4)-通過註解方式讀取外部資源配置文件2

spring boot kaigejava 凱哥java本節主要內容:1:思考問題:怎麽讀取多個配置文件,如果文件不存在怎麽辦2:配置數據庫連接池聲明:本文是《凱哥陪你學系列-框架學習之spring boot框架學習》中spring boot框架學習學前掌握之重要註解(4)-通過註解方式讀取外部資源配置文件2

iOS企業版app部署到自己服務器,不通過AppStore,在iOS設備上直接安裝應用程序

pps 所在 asset meta ict enc doc div pan iOS企業版app部署到服務器 .正對ios升級得ios7 以後,plist文件必須放到 https得服務器上了,http不可以用了 .plist參照模板如下: <?xml version=

java通過http方式下載文件

輸入流 mozilla msi 網絡 per tco you rop ddk package com.qiyi; import java.io.BufferedReader; import java.io.IOException; import java.io

SQL Server通過web方式進行遠程維護,管理

sql server遠程維護 現在許多應用都在布署到雲端,那麽數據庫都需要遠程管理維護,那麽基於web的方式進行操作是比較安全便捷的。 TreeSoft數據庫管理軟件使用JAVA開發,采用穩定通用的springMVC+JDBC架構,實現基於web方式對SQL Server,MySQL,Oracle,P

通過IDEA及hadoop平臺實現k-means聚類算法

綜合 tle tostring html map apache cnblogs cos textfile 有段時間沒有操作過,發現自己忘記一些步驟了,這篇文章會記錄相關步驟,並隨時進行補充修改。 1 基礎步驟,即相關環境部署及數據準備 數據文件類型為.csv文件,excel

通過FTP方式的yum安裝

lin 軟件包安裝 inux 解決 客戶 分享 p s 路徑 baseurl 前言: 傳統的USB光驅,移動硬盤的安裝方式在web集群,分布式計算等以力所難及。通過源碼編譯的方式安裝程序在靈活性,可定制性等方面具有無可比擬的優勢,但在大規模的服務器群應用存在一

配置SAP GUI FOR HTML(通過WEB方式登錄)

網站 編號 href c11 tag 今天 util 電腦 hosts 配置SAP GUI FOR HTML(通過WEB方式登錄) SAP系統可以通過安裝 SAP GUI、SAP GUI FOR JAVA、SAP GUI WEB FOR JAVA、SAP GUI F

通過 http 方式獲取 RabbitMQ 隊列消息數量(python3)

python    在使用 pika 連接 RabbitMQ 的過程中,發現只能獲取 ready 狀態的消息數量,只要用 http 請求來實現目的。#encoding: utf-8 #author: walker #date: 2018-03-06 #summary: 獲取 RabbitMQ 中3種狀態消息的