Подтвердить что ты не робот

FBAudienceNetwork: настройка FBNativeAd в FBMediaView устанавливает пользовательский интерфейс

Следующая строка кода делает мой стек пользовательского интерфейса

adMediaView.nativeAd = nativeAd 
// adMediaView - FBMediaView
// nativeAd - FBNativeAd

Я попытался включить его в асинхронное выполнение в фоновом потоке, но это не помогло. Есть ли способ исправить это?

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),{
    adMediaView.nativeAd = nativeAd 
});
  • Я установил FBAudienceNetwork через pods и обновил его только сейчас. У последней версии есть 4.7.0

    pod 'FBAudienceNetwork' 
    
4b9b3361

Ответ 1

NativeAdView использует FBMediaView для создания объявления. Теперь в файле заголовка View Controller объявите протокол FBNativeAdDelegate, а также объявите и подключите переменные экземпляра к вашему пользовательскому интерфейсу .XIB:

@import FBAudienceNetwork; // import Audience Network module

@interface MyViewController : UIViewController <FBNativeAdDelegate>
  // Other code might go here...
  @property (weak, nonatomic) IBOutlet UIImageView *adIconImageView;
  @property (weak, nonatomic) IBOutlet UILabel *adTitleLabel;
  @property (weak, nonatomic) IBOutlet UILabel *adBodyLabel;
  @property (weak, nonatomic) IBOutlet UIButton *adCallToActionButton;
  @property (weak, nonatomic) IBOutlet UILabel *adSocialContextLabel;
  @property (weak, nonatomic) IBOutlet UILabel *sponsoredLabel;

  @property (weak, nonatomic) FBMediaView *adCoverMediaView;

  @property (weak, nonatomic) IBOutlet UIView *adView;
@end

Затем добавьте метод в файл реализации View Controller, который инициализирует FBNativeAd и запрашивает объявление для загрузки:

FBNativeAd *nativeAd;
FBAdchoicesView *adChoicesView;

- (void)showNativeAd
{
  nativeAd = [[FBNativeAd alloc] initWithPlacementID:@"YOUR_PLACEMENT_ID"];
  nativeAd.delegate = self;
  [nativeAd loadAd];
}

Теперь, когда вы добавили код для загрузки объявления, добавьте следующие функции для обработки сбоев загрузки и для создания объявления после его загрузки:

- (void)nativeAdDidLoad:(FBNativeAd *)nativeAd
{
  [self.adTitleLabel setText:nativeAd.title];
  [self.adBodyLabel setText:nativeAd.body];
  [self.SocialContextLabel setText:nativeAd.socialContext];
  [self.sponsoredLabel setText:@"Sponsored"];
  [self.adCallToActionButton setTitle:nativeAd.callToAction];

  [nativeAd.icon loadImageAsyncWithBlock:^(UIImage *image) {
    [self.adIconImageView setImage:image];      
  }];

  // Allocate a FBMediaView to contain the cover image or native video asset
  adCoverMediaView = [[FBMediaView alloc] initWithFrame:coverFrame]];
  [adCoverMediaView setNativeAd:nativeAd];

  // Add adChoicesView
  adChoicesView = [[FBAdChoicesView alloc] initWithNativeAd:nativeAd];
  [adView addSubview:adChoicesView];
  [adChoicesView updateFrameFromSuperview];

  // Register the native ad view and its view controller with the native ad instance
  [nativeAd registerViewForInteraction:adView withViewController:self];
}

- (void)nativeAd:(FBNativeAd *)nativeAd didFailWithError:(NSError *)error
{
  NSLog(@"Ad failed to load with error: %@", error);
}

Для отображения изображения основной рекламы рекомендуется использовать сеть зрителей в сети Facebook, которая может отображать как изображения, так и видео.

Ссылка: https://developers.facebook.com/docs/audience-network/ios/native-api