2016-03-02 8 views
8

FBNativeAdsManagerDelegate in Facebook Native Anzeigen gut funktionierten in UIViewController Klasse genannt, aber wenn sie in benutzerdefinierte NSObject-Klasse verwendet seine nicht funktioniert das heißt seine Delegatmethoden nativeAdsLoaded und nativeAdsFailedToLoadWithError nicht aufgerufen haben.Facebook Native Anzeigen FBNativeAdsManagerDelegate Implementierungsmethoden nicht

CustomFBAd.h Datei

@import FBAudienceNetwork; 

#import <Foundation/Foundation.h> 

@protocol OnFBNativeAdLoadedDelegate<NSObject> 

- (void)onFBNativeAdLoaded:(UIView *)adView; 

@end 

@interface CustomFBAd : NSObject 

@property (nonatomic,weak) id <OnFBNativeAdLoadedDelegate>delegate; 

-(void)requestNativeAd:(NSString *)FaceBookPlacementID; 
@end 

CustomFBAd.m Datei

#import "CustomFBAd.h" 

@interface CustomFBAd()<FBNativeAdsManagerDelegate,FBNativeAdDelegate> 

@property (nonatomic, strong) FBNativeAdsManager *manager; 
@property (nonatomic, weak) FBNativeAdScrollView *scrollView; 

@end 
@implementation CustomFBAd 

-(void)requestNativeAd:(NSString *)FaceBookPlacementID{ 
    if(FaceBookPlacementID.length != 0){ 
     FBNativeAdsManager *manager = [[FBNativeAdsManager alloc] initWithPlacementID:FaceBookPlacementID forNumAdsRequested:5]; 
     manager.delegate = self; 
     [FBAdSettings addTestDevice:@"cf1bb93becbe6e31f26fdf7d80d19b4ae225afaa"]; 
     [manager loadAds]; 
     self.manager = manager; 
    } 
} 

#pragma mark - FBNativeAdDelegate implementation 

- (void)nativeAdDidClick:(FBNativeAd *)nativeAd 
{ 
    // NSLog(@"Native ad was clicked."); 
} 

- (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd 
{ 
    // NSLog(@"Native ad did finish click handling."); 
} 

- (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd 
{ 
    // NSLog(@"Native ad impression is being captured."); 
} 

#pragma mark FBNativeAdsManagerDelegate 

-(void)nativeAdDidLoad:(FBNativeAd *)nativeAd 
{ 

} 

- (void)nativeAdsLoaded 
{ 
    NSLog(@"Native ads loaded, constructing native UI..."); 

    if (self.scrollView) { 
     [self.scrollView removeFromSuperview]; 
     self.scrollView = nil; 
    } 

    FBNativeAdScrollView *scrollView = [[FBNativeAdScrollView alloc] initWithNativeAdsManager:self.manager withType:FBNativeAdViewTypeGenericHeight120]; 
    scrollView.xInset = 0; 
    scrollView.delegate = self; 
    self.scrollView = scrollView; 

    [self.delegate onFBNativeAdLoaded:self.scrollView]; 
} 

- (void)nativeAdsFailedToLoadWithError:(NSError *)error 
{ 
    NSLog(@"Native ads failed to load with error: %@", error); 
} 

@end 

die oben angegebenen Code I FBNativeAdsManager ‚s Delegierten in requestNativeAd Methode als

gesetzt haben

Und auch als FBNativeAdsManagerDelegate, FBNativeAdDelegate

@interface CustomFBAd()<FBNativeAdsManagerDelegate,FBNativeAdDelegate> 

Und nennen Sie diesen Code als

CustomFBAd *objFBAd = [[CustomFBAd alloc]init]; 
    objFBAd.delegate = self; 
    [objFBAd requestNativeAd:@"my_FB_placement_Id"]; 

jede Spur (Hinweis: gleiche Code funktioniert, wenn ich es in UIViewController verwenden) verwendet? Dank

+0

Nach zwei Tagen gibt es noch jemanden von Facebook, der antworten kann? –

+1

Wenn Ihre Delegatmethoden in uiviewcontroller aufgerufen werden, liegt ein Problem mit dem Code vor. Ich denke, Sie müssen eine starke Referenz von CustomFBAd in Ihrem Controller haben. Weil keine anderen Referenzen Ihre CustomFBAd-Datei erfassen. hoffe es hilft :) –

Antwort

0

wenn Ihre Delegiertenmethoden ar Wir haben uiviewcontroller aufgerufen, als es ein Problem mit dem Code gibt. Ich denke, Sie müssen eine starke Referenz von CustomFBAd in Ihrem Controller haben. Weil keine anderen Referenzen Ihre CustomFBAd-Datei erfassen. hoffe es hilft

+1

Und die vollständige Antwort ist http://stackoverflow.com/a/35935144/991085 –

+0

rettete mich endlich. Vielen Dank :) –

3

Schließlich arbeitet sie nach der Herstellung starken Bezug von CustomFBAd funktioniert es wie ein Zauber (Dank @MuhammadZohaibEhsan) .So init CustomFBAd als

@property(nonatomic, strong) CustomFBAd * objFBAd; 

Und ändern

CustomFBAd *objFBAd = [[CustomFBAd alloc]init]; 
    objFBAd.delegate = self; 
    [objFBAd requestNativeAd:@"my_FB_placement_Id"]; 

zu

self.objFBAd = [[CustomFBAd alloc]init]; 
    self.objFBAd.delegate = self; 
    [self.objFBAd requestNativeAd:@"my_FB_placement_Id"]; 
+0

Kann ich das als Antwort posten :) –

+0

warum nicht .....;) –

+0

Habe mich endlich gerettet. Danke :) –

Verwandte Themen