zoukankan      html  css  js  c++  java
  • iOS平台加入Google Admob -1/2(Unity3D开发之七)

    猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com。谢谢!

    原文地址: http://www.cocos2dev.com/?p=567


    Unity调用iOS还是非常easy的,晚上空暇时间写了unity在IOS平台载入Google Admob。须要的朋友能够看下。

    一、首先编写Admob的iOS的代码。
    请去https://apps.admob.com下载iOS Admob SDK, 并注冊app id。假设这一步不熟悉。请自行Google,网上应该非常多。

    1、IOSAdmob类,主要实现Admob的创建和载入
    IOSAdmob.h

    //
    //  IOSAdmob.h
    //  IOSAdmob
    //
    //  Created by LiuYanghui on 14-8-4.
    //  Copyright (c) 2014年 LiuYanghui. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "GADBannerView.h"
    #import "GADBannerViewDelegate.h"
    
    @interface IOSAdmob : NSObject<GADBannerViewDelegate>
    
    - (void)startRequestAdmob:(NSString*)admobId AdSize:(GADAdSize)size Position:(CGPoint)pos;
    - (void)setAdmobHidden:(BOOL)isHidden;
    
    @end

    IOSAdmob.m

    //
    //  IOSAdmob.m
    //  IOSAdmob
    //
    //  Created by LiuYanghui on 14-8-4.
    //  Copyright (c) 2014年 LiuYanghui. All rights reserved.
    //
    
    #import "IOSAdmob.h"
    
    @interface IOSAdmob ()
        @property (nonatomic) BOOL isHidden;
        @property (nonatomic) CGRect adRect;
        @property (nonatomic, readonly, strong) UIViewController* rootViewController;
        @property (nonatomic, readonly, strong) GADBannerView* adBannerView;
    @end
    
    @implementation IOSAdmob
    
    - (id) init
    {
    	self = [super init];
    	if(self != nil)
    	{
            _isHidden = NO;
            _adRect = CGRectZero;
            _rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
            _adBannerView = nil;
    	}
    	return self;
    }
    
    - (void) dealloc
    {
        [_rootViewController release];
        [_adBannerView release];
        
    	[super dealloc];
    }
    
    - (void) startRequestAdmob:(NSString*)admobId AdSize:(GADAdSize)size Position:(CGPoint)pos
    {
        if (_adBannerView) { return; }
        
        _adBannerView = [[GADBannerView alloc] initWithAdSize:size];
    //    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    //        
    //    }else {
    //
    //    }
        
        _adRect = CGRectMake(pos.x, pos.y, _adBannerView.frame.size.width, _adBannerView.frame.size.height);
        _adBannerView.adUnitID = admobId;
        _adBannerView.delegate = self;
        [_adBannerView setRootViewController:_rootViewController];
        _adBannerView.frame = _adRect;
        [_rootViewController.view addSubview:_adBannerView];
        
        double delayInSeconds = 5.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            NSLog(@"Retrying to load request");
            [_adBannerView loadRequest:[self createRequest]];
        });
    }
    
    - (void)setAdmobHidden:(BOOL)isHidden
    {
        _isHidden = isHidden;
        if (_adBannerView) {
            [_adBannerView setHidden:_isHidden];
        }
        //        [UIView animateWithDuration:0.5 animations:^ {
        //            _adBannerView.frame = _adRect;
        //        }];
    }
    
    #pragma mark GADRequest generation
    
    // Here we're creating a simple GADRequest and whitelisting the simulator
    // and two devices for test ads. You should request test ads during development
    // to avoid generating invalid impressions and clicks.
    - (GADRequest *)createRequest {
        GADRequest *request = [GADRequest request];
        return request;
    }
    
    #pragma mark GADBannerViewDelegate impl
    
    // Since we've received an ad, let's go ahead and set the frame to display it.
    - (void)adViewDidReceiveAd:(GADBannerView *)adView {
        NSLog(@"Received ad");
        _adBannerView.frame = _adRect;
        [_adBannerView setHidden:_isHidden];
    }
    
    - (void)adView:(GADBannerView *)view
    didFailToReceiveAdWithError:(GADRequestError *)error {
        NSLog(@"Failed to receive ad with error: %@", [error localizedFailureReason]);
        double delayInSeconds = 5.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            NSLog(@"Retrying to load request");
            [_adBannerView loadRequest:[self createRequest]];
        });
    }
    
    @end

    二、Admob对外单例类接口
    IOSAdmobManager.h

    //
    //  IOSAdmobManager.h
    //  IOSAdmob
    //
    //  Created by LiuYanghui on 14-8-4.
    //  Copyright (c) 2014年 LiuYanghui. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    
    @interface IOSAdmobManager : NSObject
    
    + (IOSAdmobManager *)getInstance;
    
    - (void)startRequestAdmob:(NSString*)admobId AdSizeId:(NSInteger)adSizeId Position:(CGPoint)pos;
    - (void)setAdmobHidden:(BOOL)isHidden;
    
    @end

    IOSAdmobManager.m

    //
    //  IOSAdmobManager.m
    //  IOSAdmob
    //
    //  Created by LiuYanghui on 14-8-4.
    //  Copyright (c) 2014年 LiuYanghui. All rights reserved.
    //
    
    #import "IOSAdmobManager.h"
    #import "IOSAdmob.h"
    
    @interface IOSAdmobManager ()
    @property (nonatomic, readonly, strong) IOSAdmob* admob;
    @end
    
    
    @implementation IOSAdmobManager
    
    + (IOSAdmobManager *)getInstance
    {
        static IOSAdmobManager *mgr = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            mgr = [[self alloc] init];
        });
        return mgr;
    }
    
    - (id)init
    {
        self = [super init];
        if (self) {
            _admob = [[IOSAdmob alloc] init];
            return self;
        }
        return nil;
    }
    
    - (void)startRequestAdmob:(NSString*)admobId AdSizeId:(NSInteger)adSizeId Position:(CGPoint)pos
    {
        switch (adSizeId) {
            case 1:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeBanner Position:pos];
                break;
                
            case 2:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeLargeBanner Position:pos];
                break;
                
            case 3:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeMediumRectangle Position:pos];
                break;
                
            case 4:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeFullBanner Position:pos];
                break;
                
            case 5:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeLeaderboard Position:pos];
                break;
                
            case 6:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeSkyscraper Position:pos];
                break;
                
            case 7:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeSmartBannerPortrait Position:pos];
                break;
                
            case 8:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeSmartBannerLandscape Position:pos];
                break;
                
            default:
                [_admob startRequestAdmob:admobId AdSize:kGADAdSizeBanner Position:pos];
                break;
        }
    }
    
    - (void)setAdmobHidden:(BOOL)isHidden
    {
        [_admob setAdmobHidden:isHidden];
    }
    
    @end

    三、为第二步中的单例接口注冊C函数接口。提供给Unity使用
    LHAdmob.mm

    //
    //  LHAdmob.mm
    //  IOSAdmob
    //
    //  Created by LiuYanghui on 14-8-4.
    //  Copyright (c) 2014年 LiuYanghui. All rights reserved.
    //
    
    #import "IOSAdmobManager.h"
    
    extern "C" {
        void startRequestAdmob(const char* admobId, int adSizeId, float pixelX, float pixelY)
        {
            [[IOSAdmobManager getInstance] startRequestAdmob:[NSString stringWithUTF8String:admobId] AdSizeId:adSizeId Position:CGPointMake(pixelX, pixelY)];
        }
        
        void setAdmobHidden(bool isHidden)
        {
            [[IOSAdmobManager getInstance] setAdmobHidden:isHidden];
        }
    }

    OK,到这里已经完毕了Admob的创建和Unity接口编写。

    注意:
    1、Unity导出的iOSproject默认没有使用arc,所以以上代码所有未使用arc。
    Xcode->Targets->Build Settings->Objective-C Automatic Reference Counting 设置NO,即关闭arc。

    2、针对上诉接口创建什么类型的xCodeproject ?
    你能够创建随意的Xcodeproject。编写以上代码。

    也能够创建iOS->Framework & Library->Cocos Touch Static Library 静态库project。

    3、以上代码怎样加到Unity?
    第一个方法:直接将以上代码文件拷贝到Unity->Assets/Plugins/iOS 目录中。该文件是Unity指定的插件文件。
    第二个方法:假设你创建的是静态库project。Xcode->Product->Archive 编译出.a静态库文件,将.a文件拷贝到Unity->Assets/Plugins/iOS 目录中。



  • 相关阅读:
    C# 图片与Base64的相互转化
    LeetCode 303. Range Sum Query – Immutable
    LeetCode 300. Longest Increasing Subsequence
    LeetCode 292. Nim Game
    LeetCode 283. Move Zeroes
    LeetCode 279. Perfect Squares
    LeetCode 268. Missing Number
    LeetCode 264. Ugly Number II
    LeetCode 258. Add Digits
    LeetCode 257. Binary Tree Paths
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6852038.html
Copyright © 2011-2022 走看看