iOS視頻廣告(一) GoogleAds-IMA-iOS-SDK

GoogleAds-IMA-iOS-SDK

(谷歌純視頻廣告SDK介紹 - iOS)

開(kāi)發(fā)
  1. 開(kāi)發(fā)環(huán)境: Xcode 7
  2. 運(yùn)行條件: iOS(9.0+)
  3. 管理平臺(tái): admanger帳號(hào)雄嚣。 https://admanager.google.com
  4. 官網(wǎng)文檔地址:
    https://developers.google.com/interactive-media-ads/docs/sdks/ios/

?

注意:
  • 管理平臺(tái),官網(wǎng)文檔都需要vpn才能瀏覽.
  • 如果只是實(shí)現(xiàn)廣告的一些簡(jiǎn)單功能, 看下文"SDK業(yè)務(wù)調(diào)用邏輯"介紹就可以了
  • GoogleAds-IMA-iOS-SDK只提供了視頻廣告功能, 如果要實(shí)現(xiàn)橫幅廣告/插頁(yè)式廣告/原生廣告/激勵(lì)廣告可以使用Google-Mobile-Ads-SDK, 后邊的文章會(huì)介紹
  • 小編還提供了一個(gè)SDK二次封裝的git開(kāi)源庫(kù)介紹

?

SDK業(yè)務(wù)調(diào)用邏輯


01.png

02.png

03.png

基礎(chǔ)類介紹


IMAAVPlayerContentPlayhead(一個(gè)內(nèi)容播放跟蹤類)

  • AVPlayer – 播放器
(可以設(shè)置播放器, 并且獲取播放的時(shí)間)

IMAAdsLoader(一個(gè)視頻請(qǐng)求加載類)

  • IMAAdsLoaderDelegate - 監(jiān)聽(tīng)加載情況(返回IMAAdsLoadedData->設(shè)置IMAAdsManager)
  • IMASettings - 存儲(chǔ)SDK范圍的設(shè)置(ppid蜜徽、language、enableBackgroundPlayback)

IMAAdsRequest(一個(gè)數(shù)據(jù)請(qǐng)求類)

  • adTagUrl – 視頻請(qǐng)求完成地址
  • adWillAutoPlay – 自動(dòng)播放
  • adWillPlayMuted – 靜音播放
  • IMAAdDisplayContainer - 廣告容器視圖和廣告插槽(adContainer隐砸、companionSlots)主要用于插隨播廣告

IMAAdsManager(一個(gè)廣告管理類)

  • IMAAdsManagerDelegate – 廣告響應(yīng)事件,生命周期
  • adsRenderingSettings –> 呈現(xiàn)廣告的屬性集

?

添加隨播廣告


播放廣告時(shí)塞茅,可以設(shè)置一些插播放廣告

IMACompanionAdSlot(插放廣告類)

  • view - 容器視圖
  • width - 槽的寬度混聊,以像素為單位
  • height - 槽的高度,以像素為單位
  • IMACompanionDelegate - 隨播廣告事件監(jiān)聽(tīng)代理

// 新建隨播廣告
self.companionSlot = 
[[IMACompanionAdSlot alloc] initWithView:self.companionView
width:self.companionView.frame.size.width
height:self.companionView.frame.size.height];

// 在新建容器IMAAdDisplayContainer時(shí)加入隨播廣告
self.container =
[[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
companionSlots:@[ self.companionSlot ]];

?

手動(dòng)控制播放和暫停


這里主要講手動(dòng)控制廣告播放和暫停的功能瞬场。
在默認(rèn)實(shí)現(xiàn)中买鸽,SDK將在其預(yù)定時(shí)間自動(dòng)播放。開(kāi)發(fā)人員要控制播放功能贯被,阻止SDK自動(dòng)播放眼五,你需要在IMAAdsManagerDelegate ->
(adsManager:didReceiveAdEvent:)方法中監(jiān)聽(tīng) AD_BREAK _READY 事件中處理手動(dòng)播放


- (void)setUpAdsLoader {
  ...
  IMASettings settings = [[IMASettings alloc] init];
  // 設(shè)置手動(dòng)控制廣告播放和中斷的功能
  settings.autoPlayAdBreaks = NO;
  self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings];
  ...
}

- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
  ...
  switch (event.type) {
    // 監(jiān)聽(tīng)AD_BREAK_READY事件
    case kIMAAdEvent_AD_BREAK_READY:
      // 開(kāi)始播放廣告
      [adsManager start];
      break;
    ...
  }
}

?

配置app內(nèi)部瀏覽器


瀏覽器打開(kāi)的位置: 用戶點(diǎn)擊廣告并進(jìn)入該廣告的目標(biāo)網(wǎng)頁(yè)的過(guò)程。SDK默認(rèn)使用Safari打開(kāi)彤灶,這里介紹如何配置APP內(nèi)部打開(kāi)目標(biāo)網(wǎng)站看幼,以及如何監(jiān)聽(tīng)與訪問(wèn)該頁(yè)面的用戶相關(guān)的事件。

  • IMAAdsRenderingSettings - 影響廣告呈現(xiàn)方式的屬性集

IMAAdsRenderingSettings設(shè)置內(nèi)部瀏覽器


- (void)createAdsRenderingSettings {
  self.adsRenderingSettings = [[IMAAdsRenderingSettings alloc] init];
  self.adsRenderingSettings.webOpenerDelegate = self;
  self.adsRenderingSettings.webOpenerPresentingController = self;
}

配置IMAAdsRenderingSettings實(shí)例后幌陕,可以將其傳遞給IMAAdsManager初始化方法:


[self.adsManager initializeWithAdsRenderingSettings: adsRenderingSettings];

IMA SDK提供IMAWebOpenerDelegate诵姜,以便在用戶即將查看或剛剛關(guān)閉點(diǎn)擊頁(yè)面時(shí)進(jìn)行通信。

// 外部瀏覽器將打開(kāi)
- (void)webOpenerWillOpenExternalBrowser:(NSObject *)webOpener { }

//  應(yīng)用內(nèi)瀏覽器將打開(kāi)
- (void)webOpenerWillOpenInAppBrowser:(NSObject *)webOpener { }

// 應(yīng)用內(nèi)瀏覽器已經(jīng)打開(kāi)了
- (void)webOpenerDidOpenInAppBrowser:(NSObject *)webOpener { }

// 應(yīng)用內(nèi)瀏覽器將關(guān)閉
- (void)webOpenerWillCloseInAppBrowser:(NSObject *)webOpener { }

// 應(yīng)用內(nèi)瀏覽器已經(jīng)關(guān)閉
- (void)webOpenerDidCloseInAppBrowser:(NSObject *)webOpener { }

?

Picture in Picture(畫(huà)中畫(huà))

畫(huà)中畫(huà)就是懸浮窗視頻效果


1搏熄、PIP模式是基于AVPlayerLayer的棚唆,畫(huà)面在‘原視圖’和‘懸浮窗’之間切換,實(shí)質(zhì)是‘原視圖’的layer取出心例,縮小宵凌,放到懸浮窗的layer上;

2契邀、‘懸浮窗’在新的iOS9 SDK中摆寄,有一個(gè)NB的名字:AVPictureInPictureController,目前它是不支持自定義操作的坯门,統(tǒng)一有三個(gè)按鈕微饥,‘還原’,‘暫凸糯鳎’欠橘,‘關(guān)閉’;

3现恼、PIP什么時(shí)候用呢肃续?就我而言黍檩,兩個(gè)地方:
(1)home鍵回到后臺(tái)時(shí),視頻用‘懸浮窗’播放
(2)點(diǎn)擊視頻播放器上某一個(gè)PIP按鈕始锚,視頻切換為‘懸浮窗’播放刽酱;

4、PIP適用于什么環(huán)境呢瞧捌?
(1)iOS9以上
(2)AVKit棵里、AVFoundation、WebKit類服務(wù)視頻播放
(3)被棄用的 MPMoviePlayerViewController 或 MPMoviePlayerController抱歉姐呐,建議換播放框架吧


設(shè)置AVAudioSession屬性以支持后臺(tái)播放殿怜,并在以下位置啟用后臺(tái)播放IMASettings:


- (void)viewDidLoad { 
    [super viewDidLoad];   
    self.playButton.layer.zPosition = MAXFLOAT;   
    [[AVAudioSession sharedInstance] setActive:YES error:nil]; 
    [[AVAudioSession sharedInstance] 
            setCategory: AVAudioSessionCategoryPlayback 
            error:nil];   
    [self setupAdsLoader]; 
    [self setUpContentPlayer]; 
}  

- (void)setupAdsLoader {
    IMASettings *settings = [[IMASettings alloc] init];
    settings.enableBackgroundPlayback = YES; 
    self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings]; 
    self.adsLoader.delegate = self; 
}

為了支持PictureinPicture,Apple添加了AVPictureInPictureController 和 AVPictureinPictureControllerDelegate類。就其本身而言曙砂,IMA補(bǔ)充道 IMAPictureInPictureProxy头谜。要在項(xiàng)目中包含這些類,將以下語(yǔ)句添加到代碼中:


...
@interface VideoViewController () <AVPictureInPictureControllerDelegate,
                                   IMAAdsLoaderDelegate,
                                   IMAAdsManagerDelegate,
                                   UIAlertViewDelegate>
...
// PiP objects.
@property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy;
@property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController;
...
@end

- (void)setUpContentPlayer {
  ...
  self.pictureInPictureProxy =
      [[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self];
  self.pictureInPictureController =
      [[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer];
  self.pictureInPictureController.delegate = self.pictureInPictureProxy;
}

修改廣告請(qǐng)求

還有一個(gè)新對(duì)象要?jiǎng)?chuàng)建:IMAAVPlayerVideoDisplay鸠澈。這將傳遞給您的IMAAdsRequest構(gòu)造函數(shù)柱告,并允許SDK在圖片模式下播放視頻時(shí)將廣告插入PiP窗口:


- (void)requestAdsWithTag:(NSString *)adTagUrl {
  [self logMessage:@"Requesting ads"];
  // Create an ad request with our ad tag, display container, and optional user context.
  IMAAdsRequest *request = [[IMAAdsRequest alloc]
           initWithAdTagUrl:adTagUrl
         adDisplayContainer:[self createAdDisplayContainer]
       avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer]
      pictureInPictureProxy:self.pictureInPictureProxy
                userContext:nil];
  [self.adsLoader requestAdsWithRequest:request];
}

啟動(dòng)廣告

在畫(huà)中畫(huà)模式下無(wú)法啟動(dòng) IMA SDK廣告。因此款侵,您需要確保僅[adsManager start] 在視頻處于標(biāo)準(zhǔn)播放模式時(shí)進(jìn)行呼叫:


...
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
  [self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]];
  // When the SDK notified us that ads have been loaded, play them.
  switch (event.type) {
    case kIMAAdEvent_LOADED:
      if (![self.pictureInPictureController isPictureInPictureActive]) {
        [adsManager start];
      }
      break;
    ...
    default:
      break;
  }
}

進(jìn)入畫(huà)中畫(huà)模式

如果你使用的是AVPlayer沒(méi)有AVPlayerViewController末荐,你需要添加自己的畫(huà)中畫(huà)按鈕。我們?cè)诟呒?jí)示例中實(shí)現(xiàn)了一個(gè) 如下:


- (IBAction)onPipButtonClicked:(id)sender {
  if ([self.pictureInPictureController isPictureInPictureActive]) {
    [self.pictureInPictureController stopPictureInPicture];
  } else {
    [self.pictureInPictureController startPictureInPicture];
  }
}

常問(wèn)問(wèn)題
如果視頻處于畫(huà)中畫(huà)模式新锈,如何啟動(dòng)廣告甲脏?
  • 視頻處于畫(huà)中畫(huà)模式時(shí)無(wú)法啟動(dòng)廣告; 它們只能在標(biāo)準(zhǔn)播放模式下啟動(dòng)。
我現(xiàn)有的畫(huà)中畫(huà)集成需要設(shè)置self.pictureInPictureController.delegate 為我自己的類妹笆。如何在畫(huà)中畫(huà)中實(shí)施IMA廣告并仍然是代表块请?
  • IMA SDK還需要接收AVPictureinPictureControllerDelegate 消息以在畫(huà)中畫(huà)模式下啟用廣告播放。這就是我們要求您將委托設(shè)置為AVPictureinPictureController實(shí)例的原因 IMAPictureInPicturyProxy拳缠。此代理對(duì)象會(huì)將所有AVPictureinPictureControllerDelegate消息轉(zhuǎn)發(fā) 到您的應(yīng)用绅喉,但也會(huì)將呼叫轉(zhuǎn)發(fā)給IMA以啟用畫(huà)中畫(huà)支持茶敏。請(qǐng)注意禁荒,您還必須維護(hù)AVPlayerLayer的本地句柄痊班。

?

?

建立廣告單元(Ad Manager)

廣告后臺(tái)管理平臺(tái)


網(wǎng)址: https://admanager.google.com

1. ? 登錄 Google Ad Manager。

?

2. ? 新建移動(dòng)應(yīng)用
  • 依次點(diǎn)擊<廣告資源> 接著點(diǎn)擊 <移動(dòng)應(yīng)用> 接著點(diǎn)擊 <新建移動(dòng)應(yīng)用>哲鸳。

?

01.png

?

02.png
2. ? 依次點(diǎn)擊<廣告資源> 接著點(diǎn)擊 <廣告單元>臣疑。

?

3. ? 您可以創(chuàng)建包含至多 5 級(jí)組織層次結(jié)構(gòu)的廣告單元(在 Google Ad Manager 中,您只能創(chuàng)建包含至多 2 級(jí)組織層次結(jié)構(gòu)的廣告單元)徙菠。在顯示現(xiàn)有廣告單元的對(duì)話框中:

?

  • 選擇您希望新廣告單元顯示在哪個(gè)廣告單元的層次結(jié)構(gòu)中讯沈。
  • 如果您未選擇廣告單元,則新廣告單元將位于頂級(jí)婿奔。

?

4. ? 點(diǎn)擊新建廣告單元缺狠,然后選擇:

?

  • 比“…”低一級(jí)问慎,以在所選廣告單元下創(chuàng)建一個(gè)廣告單元。
  • 當(dāng)前級(jí)別挤茄,以創(chuàng)建一個(gè)在層次結(jié)構(gòu)中與所選廣告單元處于同一級(jí)別的廣告單元如叼。
03.png

?

5. ? 輸入代碼以用于在關(guān)聯(lián)的廣告代碼中標(biāo)識(shí)該廣告單元。此代碼一經(jīng)確定便無(wú)法更改穷劈。
04.png
05.png
  • 創(chuàng)建一個(gè)易于識(shí)別的代碼(例如薇正,News_International_BoxATF 或 Leaderboard_BTF)。
  • 您只能在不同的廣告單元級(jí)別重復(fù)使用代碼(例如囚衔,您可以在 mysite_economy_home 和 mysite_weather_home 重復(fù)使用 home)。

?

6. ? 為該廣告單元輸入名稱和說(shuō)明 (Optional) 雕沿。最好在名稱中包含與廣告單元位置相關(guān)的信息练湿。

?

7. ? 設(shè)置要與該廣告單元關(guān)聯(lián)的尺寸 (Optional) ,以幫助 Google Ad Manager 過(guò)濾出要向廣告投放人員顯示的廣告單元列表审轮。此列表不會(huì)影響廣告投放肥哎。

?

  • 選擇固定尺寸,以指定您希望該廣告單元投放的廣告素材的尺寸列表疾渣。其中包括頁(yè)外尺寸篡诽,采用此類尺寸的廣告素材(例如彈出式廣告素材、浮動(dòng)訂單項(xiàng)廣告素材和插頁(yè)式廣告素材)無(wú)法在傳統(tǒng)橫幅空間或?yàn)g覽器窗口內(nèi)展示榴捡。
  • 如果廣告單元適用于移動(dòng)應(yīng)用杈女,而且您希望廣告單元具有固定的高度且與屏幕同寬,請(qǐng)選擇智能橫幅吊圾。

想向您的廣告聯(lián)盟添加新尺寸达椰?
新建一個(gè)廣告單元并添加新尺寸,或者將新尺寸添加到分配給現(xiàn)有廣告單元的尺寸列表中项乒。只要在至少 1 個(gè)廣告單元或訂單項(xiàng)中定義了一個(gè)尺寸啰劲,就可以在廣告聯(lián)盟中的別處使用該尺寸。

?

8. ?(不適用于 Ad Exchange 代碼)定義目標(biāo)窗口以設(shè)定相應(yīng)廣告的點(diǎn)擊后到達(dá)網(wǎng)址鏈接的目標(biāo)屬性檀何,從而告知瀏覽器在何處打開(kāi)該廣告的著陸頁(yè)蝇裤。

?

  • _top:著陸頁(yè)會(huì)在整個(gè)窗口中加載(不受任何框架集的約束)。
  • _blank:著陸頁(yè)會(huì)在未命名的新窗口中打開(kāi)频鉴。

如果選擇此選項(xiàng)栓辜,著陸頁(yè)將會(huì)在廣告資源部分的“廣告聯(lián)盟設(shè)置”中設(shè)置的默認(rèn)目標(biāo)窗口中打開(kāi)。如果廣告單元位于移動(dòng)應(yīng)用中砚殿,則系統(tǒng)會(huì)忽略目標(biāo)窗口啃憎。對(duì)于 Android 和 iOS 應(yīng)用,廣告會(huì)在未命名的新瀏覽器窗口中加載似炎。

?

9. ?(高級(jí)辛萍,不適用于 Ad Exchange 代碼)根據(jù)需要為該廣告單元添加可選的功能和設(shè)置悯姊。

?

  • 展示位置:點(diǎn)擊一個(gè)或多個(gè)展示位置名稱旁邊的包含,以將其與您的新廣告單元關(guān)聯(lián)贩毕。
  • 特殊廣告單元:廣告投放人員必須明確定位該廣告單元悯许,才能使訂單項(xiàng)順利投放。
    僅在 Google Ad Manager 360 中提供辉阶。
  • 廣告單元頻次上限:點(diǎn)擊添加標(biāo)簽規(guī)則先壕,以限制向用戶展示定義了相同標(biāo)簽的廣告素材的次數(shù)。
  • 刷新率:對(duì)于移動(dòng)應(yīng)用廣告資源谆甜,設(shè)置刷新率可確定新廣告展示的生成頻率垃僚。如果您選擇刷新率(秒),則 Google Ad Manager 會(huì)自動(dòng)填充“60”這個(gè)值规辱,不過(guò)您也可將其更改為 30-120 秒之間的任意值谆棺。
  • 標(biāo)簽:為該廣告單元添加標(biāo)簽,以便系統(tǒng)在向該廣告單元投放廣告素材時(shí)可以應(yīng)用廣告素材封裝容器罕袋。
  • 小組:如果您的廣告聯(lián)盟使用小組改淑,請(qǐng)關(guān)聯(lián)該廣告單元以限定訪問(wèn)權(quán)限。
    點(diǎn)擊保存浴讯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朵夏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榆纽,更是在濱河造成了極大的恐慌仰猖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奈籽,死亡現(xiàn)場(chǎng)離奇詭異亮元,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)唠摹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門爆捞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人勾拉,你說(shuō)我怎么就攤上這事煮甥。” “怎么了藕赞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵成肘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我斧蜕,道長(zhǎng)双霍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮洒闸,結(jié)果婚禮上染坯,老公的妹妹穿的比我還像新娘。我一直安慰自己丘逸,他們只是感情好单鹿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著深纲,像睡著了一般仲锄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上湃鹊,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天儒喊,我揣著相機(jī)與錄音,去河邊找鬼币呵。 笑死澄惊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的富雅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肛搬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼没佑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起温赔,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蛤奢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后陶贼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啤贩,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年拜秧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痹屹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枉氮,死狀恐怖志衍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情聊替,我是刑警寧澤楼肪,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站惹悄,受9級(jí)特大地震影響春叫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一暂殖、第九天 我趴在偏房一處隱蔽的房頂上張望价匠。 院中可真熱鬧,春花似錦央星、人聲如沸霞怀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)毙石。三九已至,卻和暖如春颓遏,著一層夾襖步出監(jiān)牢的瞬間徐矩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工叁幢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滤灯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓曼玩,卻偏偏與公主長(zhǎng)得像鳞骤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子黍判,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1編寫(xiě)目的 預(yù)期讀者: 有視頻編輯開(kāi)發(fā)經(jīng)驗(yàn)或者無(wú)經(jīng)驗(yàn)的豫尽,打算或者正在使用“銳動(dòng)iOS帶UI視頻編輯SDK”的相關(guān)工...
    藤姚閱讀 432評(píng)論 0 0
  • 年年歲歲花相似,歲歲年年人不同顷帖。今年的 WWDC 一如既往的熱鬧美旧,但是因?yàn)橐疹櫦依飫偝錾膶殞氁约皩殞毜哪铮椭?..
    狼鳳皇閱讀 426評(píng)論 1 0
  • 導(dǎo)入谷歌移動(dòng)廣告 SDK測(cè)試廣告ID 開(kāi)始之前贬墩,首先要注意的是榴嗅,在開(kāi)發(fā)和測(cè)試應(yīng)用時(shí),應(yīng)確保使用測(cè)試廣告而不是實(shí)際投...
    iOS攻城獅_Runloop閱讀 3,504評(píng)論 0 1
  • 用兩張圖告訴你陶舞,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料嗽测? 從這篇文章中你...
    hw1212閱讀 12,714評(píng)論 2 59
  • iOS視頻廣告(二) GoogleAds-IMA-iOS-SDK (GoogleAds-IMA-iOS-SDK ...
    Coder_TanJX閱讀 639評(píng)論 0 2