2014-09-21 66 views
0

我試圖在完成IAP設置後刪除AdMob橫幅。據我所知,IAP的設置是正確的,但出於某種原因,我遇到的問題是當用戶完成交易後嘗試隱藏廣告時,廣告不會隱藏。 NSLog顯示,但廣告不隱藏。不過,我可以從我的程序中的不同方法發送相同的消息,它會將廣告完全隱藏起來。將消息發送給AppDelegate,不適用於應用內購買

希望我能有這個代碼更容易解​​釋:

我試圖掩蓋它是這樣的:

當交易購買:

 case SKPaymentTransactionStatePurchased:    
      [self provideContent:transaction.payment.productIdentifier]; 
     [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
     NSLog(@"Transaction state -> Purchased"); 
     break; 

provideContent方法:

-(void)provideContent:(NSString *)productIdentifer 
{ 
    if ([productIdentifer isEqualToString:@"product id here"]) { 
     AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; 
     [app hideBannerApp]; 
    } 
} 

and now in appdelegate:

-(void)hideBannerApp 
{ 
    NSLog(@"Hidden banner"); 
    [topBanner removeFromSuperview]; 
    [[NSUserDefaults standardUserDefaults]setBool:areAdsRemoved forKey:@"areAdsRemoved"]; 
} 

由於某種原因,這不會隱藏廣告。 NSLog在xcode中顯示,但廣告沒有被刪除。

但是,當我從不同的方法調用[app hideBannerApp]時,它工作得很好。

例子:

-(void)tapButton 
{ 
     if ([productIdentifer isEqualToString:@"product id here"]) { 
      AppController *app = (AppController*) [[UIApplication sharedApplication] delegate]; 
      [app hideBannerApp]; 
} 

所以如果我有一個鏈接到這個方法的按鈕,它會刪除的廣告和它的作品。那麼,爲什麼當我做完全相同的事情時卻不能工作,但是在應用程序購買中呢?

+0

我會做的第一件事就是設置一個斷點,並驗證'topBanner'不是零 – Paulw11 2014-09-21 21:55:20

+0

我設置一個斷點在'[topBanner removeFromSuperView]';這不是零。它打印了這個描述。 '>' – SaleenS7 2014-09-21 22:02:23

+1

您的應用內購買是否在後臺線程上完成?嘗試'dispatch_async(dispatch_get_main_queue(),^ {[app hiderBannerApp];});' – Paulw11 2014-09-21 22:06:30

回答

1

正在從應用程序代理方法didBecomeActive添加橫幅視圖 - 此方法可能會在應用程序的生存期內執行多次,從而導致多個橫幅視圖相互疊加。只有最上面的視圖被刪除。

旗幟添加代碼被轉移到didFinishLaunching,這解決了這個問題