2012-03-14 26 views
6

Tôi muốn sử dụng AdMob trong ứng dụng của mình và tôi có 4 viewControllers (trong 4 mục tab) nơi tôi muốn hiển thị nó. Cách mẫu cho thấy, mọi ViewController cần tạo ra thể hiện của nó và thêm làm subview.Trường hợp đơn lẻ AdMod trong tất cả ViewControllers

Tôi vẫn đang suy nghĩ nếu có thể có một số cách khác nhau để chỉ sử dụng 1 phiên bản có thể được sử dụng trong tất cả ứng dụng. Làm thế nào tôi có thể làm điều đó?

Nếu tôi tạo 1 thể hiện trong AppDelegate là tự động trả lại và giữ lại trong mỗi khung nhìnController và trên viewDidUnload giải phóng nó và sau đó trong mục tab tiếp theo (viewController) tôi lại giữ nó vv ... là cách tiếp cận tốt?

Trả lời

2

AppAelegate aproach là một cách tiếp cận tốt đẹp nhưng bạn không nên giữ lại thể hiện của admob trong mọi viewcontroller và phát hành tương tự trong phương thức viewDidUnload. Thay vì làm điều này, chỉ cần thêm chế độ xem của admob trong mỗi phương thức viewDidLoad của chế độ xem là một chế độ xem phụ. Theo cách này, sẽ chỉ có một phiên bản của chế độ xem AdMob trong AppDelegate.

Hy vọng điều này sẽ giúp bạn.

+0

Bạn không thể thêm một chế độ xem làm chế độ xem phụ cho nhiều chế độ xem. – beryllium

3

Bạn có thể khai báo chế độ xem admob của mình trong appDelegate và thêm nó dưới dạng xem phụ vào cửa sổ. Tham khảo chế độ xem admob từ VC thông qua appDelegate

7

Chắc chắn, điều đó có hiệu quả nhưng vấn đề duy nhất là khi bạn cập nhật đại biểu cho quảng cáo, nó sẽ không thực sự nhận đại biểu mới cho quảng cáo trừ khi bạn thực hiện một cách mới yêu cầu quảng cáo, do đó, chế độ xem cũ của bạn sẽ nhận được bất kỳ thông báo nào từ quảng cáo. Tôi muốn giới thiệu phương pháp tạo một singleton adMob sau đó chuyển tiếp bất kỳ thông báo nào của đại biểu đến chế độ xem phù hợp.

Vì vậy, việc tạo ra một lớp được gọi là GADMasterViewController (đảm bảo tuân thủ các GADBannerViewDelegate giao thức quá) hoặc một cái gì đó trong đó có một initializer tĩnh như vậy:

+(GADMasterViewController *)singleton { 
    static dispatch_once_t pred; 
    static GADMasterViewController *shared = nil; 
    dispatch_once(&pred, ^{ 
    shared = [[GADMasterViewController alloc] init]; 
    }); 
    return shared; 
} 

Sau đó, trong initializer bạn có thể khởi tạo một GADBannerView duy nhất như là một tài sản của singleton này:

-(id)init 
{ 
    if (self = [super init]) 
    { 
    self.adBanner = [[GADBannerView alloc] 
        initWithFrame:CGRectMake(0.0, 
               0.0, 
               GAD_SIZE_320x50.width, 
               GAD_SIZE_320x50.height)]; 

    // Has an ad request already been made 
    self.isLoaded = NO; 
    } 
    return self; 
} 

Sau đó, bạn có thể có một phương pháp mà đặt adview mới của bạn như là currentDelegate như vậy:

-(void)resetAdView:(UIViewController<GADBannerViewDelegate> *)rootViewController { 

    if (self.isLoaded) { 
    currentDelegate_ = rootViewController; 
    [rootViewController.view addSubview:self.adBanner]; 
    } 
    else { 
    // The delegate to forward any notifications too 
    currentDelegate_ = rootViewController; 

    self.adBanner.delegate = self; 
    self.adBanner.rootViewController = rootViewController; 
    self.adBanner.adUnitID = kSampleAdUnitID; 

    GADRequest *request = [GADRequest request]; 

    [self.adBanner loadRequest:request]; 
    [rootViewController.view addSubview:self.adBanner]; 
    self.isLoaded = YES; 
    } 
} 

Tại thời điểm này, bạn chỉ muốn chuyển tiếp bất kỳ thông báo mà bạn nhận được để các viewController đúng, vì vậy một ví dụ sẽ là:

- (void)adViewDidReceiveAd:(GADBannerView *)view { 
    if ([currentDelegate_ respondsToSelector:@selector(adViewDidReceiveAd:)]) { 
    [currentDelegate_ adViewDidReceiveAd:view]; 
    } 
} 

Trong ViewControllerX (một trong 4 ViewControllers của bạn), bạn có thể chỉ thêm nó vào phân cấp chế độ xem của bạn bằng cách sử dụng:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    shared = [GADMasterViewController singleton]; 
    [shared resetAdView:self]; 
} 
+0

Xin cảm ơn tất cả mọi người. – Anand

+3

Cảm ơn bạn, Raj, vì câu trả lời tuyệt vời. Đối với những người đọc sách này, bạn cũng có thể đọc http://googleadsdeveloper.blogspot.co.il/2012/04/creating-gadbannerview-singleton-in.html – kernix

Các vấn đề liên quan