2014-09-21 59 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,这解决了这个问题