在应用内购买之后,我已经成功从Sprite Kit游戏中删除了iAd,但是问题是该应用需要重新启动才能停止展示。
这使我相信,需要在应用内购买完成后以某种方式刷新或重新加载视图或场景(我已经尝试了很多方法),以便iAd消失。
应用内购买是在一个名为PurchasedViewController的单独类中进行的,我以模态形式进行了介绍。
目前,我正尝试在购买回购给根View Controller之后发送通知。
这是我的代码:
ViewController.m
#import "ViewController.h"
#import "Intro.h"
#import "PurchasedViewController.h"
#import <iAd/iAd.h>
#import "InAppManager.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reload)
name:@"reloadIntro"
object:nil];
// Configure the view.
SKView * skView = (SKView *)self.view;
// Create and configure the scene.
SKScene *scene = [Intro sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
// Present the scene
[skView presentScene:scene];
}
-(void)reload {
// Reload the View/Scene to remove iAds
.....
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//Display iAds
if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == FALSE) {
NSLog(@"iAds are showing");
ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)];
[self.view addSubview:adView];
}
//Remove iAds
else if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == TRUE) {
NSLog(@"iAds have been removed");
ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)];
adView.hidden = YES;
[adView removeFromSuperview];
}
}
PurchasedViewController.m
我不会在这里放很多In App Purchase代码,因为我知道它可以工作,并且我也已经成功删除了Chartboost的广告。
-(void) unlockProduct1 {
if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == NO) {
NSLog(@"Product 1 was not bought yet");
[buyProduct1Button setBackgroundImage:[UIImage imageNamed:@"Remove_Ads"] forState:UIControlStateNormal];
}
else {
NSLog(@"Product 1 WAS bought");
[buyProduct1Button setBackgroundImage:[UIImage imageNamed:@"Purchased"] forState:UIControlStateNormal];
// Sending Notification to ViewController.m
NSLog(@"Did Send notification reloadIntro");
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadIntro" object:nil];
}
}
- (IBAction)dismissPurchasedVC:(UIButton *)sender {
[self dismissModalViewControllerAnimated:YES];
}
这不会删除iAd视图:
//Remove iAds
else if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == TRUE) {
NSLog(@"iAds have been removed");
ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)];
adView.hidden = YES;
[adView removeFromSuperview];
}
它的作用:创建一个新的iAd视图,将其设置为隐藏状态,并将其从其超级视图中删除(从未添加到该视图)。iAd视图的实际“活动”实例不受此影响。
您需要一个现有iAd视图的参考(ivar):
@implementation ViewController
{
ADBannerView* _adView;
}
创建广告横幅视图时分配参考:
_adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)];
[self.view addSubview:_adView];
然后使用引用删除广告横幅视图:
[_adView removeFromSuperview];
_adView = nil;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句