我無法讓AdMob或iAd橫幅廣告在iOS ActionExtension或ShareExtension中工作 - 任何人都可以獲得這些成功工作,如果有,怎麼樣? AdMob和iAd均可在ActionExtension應用程序的「容器」部分(在模擬器或實際設備上運行)中正常工作,但在擴展程序中似乎都不起作用。 (運行在應用程序的擴展部分,沒有任何事件被觸發,沒有廣告出現,但沒有任何錯誤的跡象,在iOS 8或iOS 9中測試。)無法讓AdMob或iAd橫幅廣告在iOS中使用ActionExtension或ShareExtension
(請注意,我不是試圖一起運行這兩個;我開始與AdMob,並沒有得到那個工作,所以我用iAd取代它,但也沒有運氣)
如果這些都沒有工作,有沒有人成功地使用任何ad-基於組件的ActionExtension或ShareExtension? (不幸的是,這個應用程序的所有功能,在擴展部分,以賺錢什麼的唯一機會是在擴展部分)。
更新1:
我也試過AdMob插頁式廣告,但同問題。對象被實例化,但事件永遠不會被解僱。
最新的代碼示例的迭代:
注意的是,雖然第一代碼示例使用Xamarin.iOS在C#中,信息的點點我已經通過谷歌搜索大量發現表明了類似的問題(多數沒有答案,不幸的是)在Objective-C和Swift中,所以問題似乎在擴展處理本身,而不是在Xamarin包裝中。此外,AdMob SDK v7.2.2和v7.5.0都顯示相同的問題。
「Update#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;
};
}
}
谷歌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:
我也試過網絡成癮者(ADBannerView
)在ShareExt在C#和Objective-C中都存在。兩種語言的結果與上面相同:組件已創建,但未激發任何事件。
此外,通過代理HTTP &通過運行Fiddler的另一臺計算機的HTTPS流量確認沒有HTTP或HTTPS請求由應用的擴展部分中運行的iAd組件進行。
iAd的目標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。L:
@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
編輯您的問題,包括一些與您嘗試過的相關的代碼。 –
上面添加了代碼(在C#和Objective-C變體中,以及iAds和AdMob中都有) - 有沒有人看到任何原因導致此問題無法正常工作? – BillB