发送消息给AppDelegate不使用应用内购买

时间:2014-09-21 21:32:48

标签: ios objective-c storekit

我正在尝试在完成IAP设置后删除AdMob横幅。据我所知,IAP设置正确,我出于某种原因遇到的问题是,当我尝试在用户完成交易后隐藏广告时,广告不会隐藏。 NSLog显示,但广告不隐藏。但是,我可以从我的程序中的不同方法发送相同的消息,它将完全隐藏广告。

希望我能用这段代码更容易解​​释:

我试图隐藏它:

购买交易时:

        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];
    }
}

现在在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];
}

因此,如果我有一个与此方法相关联的按钮,则会删除该广告并且它可以正常工作。那么,当我做同样的事情时,为什么它不起作用,但是在应用程序中购买?

1 个答案:

答案 0 :(得分:1)

横幅视图是从应用委托方法didBecomeActive添加的 - 此方法可能会在应用程序的生命周期内执行多次,从而导致多个横幅视图相互叠加。只删除了最顶层的视图。

横幅广告代码已移至didFinishLaunching,解决了问题