gpt4 book ai didi

ios - 无法让 AdMob 或 iAd 横幅广告在 iOS ActionExtension 或 ShareExtension 中运行

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:06 27 4
gpt4 key购买 nike

我无法让 AdMob 或 iAd 横幅广告在 iOS ActionExtension 或 ShareExtension 中运行 - 有没有人成功地运行了其中任何一个,如果成功了,怎么做的? AdMob 和 iAd 在 ActionExtension 应用程序的“容器”部分(在模拟器或实际设备上运行)都可以正常工作,但在扩展程序中似乎都不起作用。 (在应用程序的扩展部分运行,没有触发任何事件,也没有出现广告,但没有任何错误迹象,在 iOS 8 或 iOS 9 中测试。)

(请注意,我并没有尝试同时运行这两个;我从 AdMob 开始,但无法让它工作,所以我用 iAd 替换了它,但也没有运气。)

如果这些都不起作用,是否有人在 ActionExtension 或 ShareExtension 中成功使用了任何基于广告的组件? (不幸的是,这个应用程序的所有功能都在扩展部分,所以唯一的赚钱机会是在扩展部分。)

更新 1:

我也试过 AdMob Interstitial 广告,但同样的问题。对象被实例化,但事件永远不会被触发。

代码示例的最新迭代:

请注意,虽然第一个代码示例是使用 Xamarin.iOS 在 C# 中编写的,但我通过大量谷歌搜索发现的少量信息显示了 Objective-C 和 Swift 中的类似问题(不幸的是,大多数没有答案) ,所以问题似乎出在扩展处理本身而不是 Xamarin 包装器中。此外,AdMob SDK v7.2.2 和 v7.5.0 都出现了同样的问题。

“更新 #2”包含 Objective-C 中的代码示例——它们也以完全相同的方式失败。

iAd C# 版本:

public partial class ActionViewController : UIViewController {
ADBannerView _adBannerView;

public override void ViewDidLoad () {
base.ViewDidLoad ();

// Hook in the iAd component
_adBannerView = new ADBannerView (iAd.ADAdType.Banner) {
Hidden = true
};
adContainerView.AddSubview (_adBannerView);

_adBannerView.FailedToReceiveAd += (object sender, AdErrorEventArgs e) => {
Console.WriteLine ("********** Failed to load ad: " + e.Error.LocalizedDescription);
_adBannerView.Hidden = true;
};

_adBannerView.AdLoaded += (sender, args) => {
Console.WriteLine ("********** Successfully loaded ad.");
_adBannerView.Hidden = false;
};
}
}

Google AdMob C# 版本:

public partial class ActionViewController : UIViewController {
const string AdmobID = "ca-app-pub-xxxxxxxxxxxxxxxxxxxxxxxxxxx";
BannerView adView;
bool _viewOnScreen = false;

public override void ViewDidLoad () {
base.ViewDidLoad ();

// === banner ad ===
adView = new BannerView (size: AdSizeCons.Banner, origin: new CGPoint (0, 0)) {
AdUnitID = AdmobID,
RootViewController = this
};

adView.AdReceived += (object sender, EventArgs e) => {
Console.WriteLine ("********** Banner Ad received");
if (! _viewOnScreen) {
adContainerView.AddSubview(adView);
_viewOnScreen = true;
}
};

adView.ReceiveAdFailed += (sender, e) => {
Console.WriteLine ("********** BANNER AD FAILED");
};

Request request = Request.GetDefaultRequest();
#if DEBUG
request.TestDevices = new string[] { Request.GetSimulatorId().ToString() };
#endif
adView.LoadRequest (request);


// === AdMob Interstitial Ads ===
Interstitial adInterstitial = new Interstitial("ca-app-pub-xxxxxxxxxxxxxxxxxxxxxxxxxxx");
Request requestInterstitial = Request.GetDefaultRequest();

adInterstitial.AdReceived += (sender, args) =>
{
Console.WriteLine ("********** INTERSTITAL: Successfully received ad");
};
adInterstitial.ReceiveAdFailed += (sender, e) => {
Console.WriteLine ("********** INTERSTITAL: 'Receive Ad' FAILED");
};

#if DEBUG
requestInterstitial.TestDevices = new string[] { Request.GetSimulatorId().ToString() };
#endif
adInterstitial.LoadRequest(requestInterstitial);

}
}

更新 2:

我还在 C# 和 Objective-C 的 ShareExtension 中尝试了 iAds (ADBannerView)。两种语言的结果与上述相同:创建了组件,但没有触发任何事件。

此外,通过另一台运行 Fiddler 的机器代理 HTTP 和 HTTPS 流量可确认在应用的扩展部分中运行的 iAd 组件没有发出 HTTP 或 HTTPS 请求。

iAd Objective-C 版本(仅显示与 iAd 相关的代码):

TestViewController.h:

#import <UIKit/UIKit.h>
#import <iAd/iAd.h>

@protocol ExtensionContextHolder <NSObject>
- (NSExtensionContext *)extensionContext;
@end

@interface TestViewController : UIViewController<ADBannerViewDelegate>
- (instancetype)initWithExtensionContextHolder:(id<ExtensionContextHolder>)extensionContextHolder;
@end

TestViewController.m:

@implementation TestViewController

- (void)viewDidLoad {
[super viewDidLoad];

ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 50, 320, 50)];
adView.delegate = self;
[self.view addSubview:adView];
}

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave {
return YES;
}

- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
NSLog(@"********** LOADED AN AD **********");
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
NSLog(@"********** FAILED TO RECEIVE AN AD **********");
}

@end

最佳答案

回答我自己的问题只是为了解决遇到此问题的任何其他人的问题:事实证明,根据 Apple 的审查指南,审查标准 25.3 规定:

Apps hosting extensions that include marketing, advertising, or in-app purchases in their extension view will be rejected.

我认为这是扩展中的技术问题;事实证明确实如此,但以更大的方式。

关于ios - 无法让 AdMob 或 iAd 横幅广告在 iOS ActionExtension 或 ShareExtension 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33976105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com