2015-11-28 6 views
3

Я не могу использовать объявления AdMob или iAd для работы в iOS ActionExtension или ShareExtension - кто-нибудь получил любую из них, чтобы успешно работать, и если да, как? Как AdMob, так и iAd работают нормально в разделе «контейнер» приложения ActionExtension (работает либо в Simulator, либо на самом устройстве), но, похоже, не работает в Extension. (Выполняется в части расширения приложения, ни одно из событий не запускается, и не отображается никаких объявлений, но нет никаких признаков ошибок, тестирование в iOS 8 или iOS 9.)Невозможно получить рекламное объявление AdMob или iAd для работы в iOS ActionExtension или ShareExtension

(Обратите внимание, что я не пытаясь запустить их вместе, я начал с AdMob и не мог заставить это работать, поэтому я заменил его на iAd, но не повезло и там.)

Если ни одна из этих работ не была успешно использована, основанный компонент в ActionExtension или ShareExtension? (К сожалению, все функциональные возможности этого приложения в части выдвижения поэтому единственный шанс монетизировать что-либо в части выдвижения.)

Update 1:

Я также попытался AdMob межстраничных объявлений, но это же проблема. Объекты получают экземпляр, но события никогда не срабатывают.

Последняя итерация образцов кода:

Обратите внимание, что в то время как образцы первого кода в C# с использованием Xamarin.iOS, крошечное немного информации, которую я нашел с помощью массивного Googling показывает аналогичные вопросы (большинство без ответов, к сожалению) в Objective-C и Swift, поэтому проблема, похоже, связана с самой обработкой Extension, а не с обертками Xamari. Кроме того, обе версии AdMob SDK v7.2.2 и v7.5.0 показали ту же проблему.

«Обновление № 2» содержит образцы кода в Objective-C - они также терпят неудачу точно так же.

ОВР 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); 

    } 
} 

Update 2:

Я также попытался МААШ (ADBannerView) в ShareExt как в C#, так и в Objective-C. Те же результаты, что и выше на обоих языках: компоненты создаются, но никаких событий не запускается.

Кроме того, проксирование HTTP & HTTPS-трафик через другую машину, на которой работает Fiddler, подтверждает, что HTTP-запрос или запрос HTTPS не выполняются компонентом iAd, который выполняется в части расширения приложения.

ОВР Objective-C версии (показывать только ОВР-код, связанный с):

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.м:

@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 
+0

Редактируйте свой вопрос, чтобы включить соответствующий код, относящийся к тому, что вы пробовали. –

+1

Добавлен код выше (как в вариантах C#, так и в Objective-C, а также как для iAds, так и для AdMob). Кто-нибудь видит, почему это не должно работать должным образом? – BillB

ответ

2

Отвечая на мой собственный вопрос просто закрыть этот вопрос за кого-то, кто бьет эту проблему: Получается, что согласно руководящим принципам обзора Apple, критерии обзора 25.3 состояний:

приложения хостинг расширений, которые включая маркетинг, рекламу или в приложении покупки в расширенном виде будут отклонены.

Я предположил, что это была техническая проблема в Расширении; оказывается, это было, но намного больше.

+0

Полезно знать. Я предположил, что существует какое-то руководство, предотвращающее это. –

+0

С выпуском iOS 10 это ограничение было снято. Не уверен, если вы пересмотрели это, но если бы вы могли втиснуть AdMob в расширение? – edelaney05