2015-11-28 102 views
3

我無法讓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 
+0

編輯您的問題,包括一些與您嘗試過的相關的代碼。 –

+1

上面添加了代碼(在C#和Objective-C變體中,以及iAds和AdMob中都有) - 有沒有人看到任何原因導致此問題無法正常工作? – BillB

回答

2

回答我的問題只是關閉這個問題出來爲別人誰打這個問題:原來,每個蘋果的審查指南,審查標準25.3狀態:

應用程序託管擴展,包括在其擴展視圖中進行的營銷,廣告或應用內購買會被拒絕。

我認爲這是擴展中的技術問題;事實證明,這是一個更大的方式。

+0

很高興知道。我認爲有一些指導方針阻止了這一點。 –

+0

隨着iOS 10的發佈,這一限制已被解除。不確定您是否重新訪問了此文件,但如果是的話,您是否可以將AdMob嵌入到擴展中? – edelaney05