开屏自定义平台的适配方法

  对于开屏AFP SDK并不要求第三方SDK的开屏是个什么样的的类型,在开屏的使用说明中介绍过,开发者使用AFP SDK的开屏类MMUSplashs获取创意的时候时候需要设置MMUSplashsmWindowForSplash属性,这个属性指代就是开屏创意渲染所需的window,AFP SDK会把这个属性包装到开屏适配器的基类MMUSplashAdNetworkAdapterration属性中。开发者可以获取这个window并在上面渲染开屏创意。

  因为AFP已经默认适配了一些平台的开屏样式,开发者可以参考这些实例来完成自己的适配,这里的适配主要是针对SDK接入方式的,对于数据接口的开屏方式请参考 SDK平台适配介绍 小节,这里以适配广点通的开屏为例介绍。

  首先开发者定义的适配器必须是MMUSplashAdNetworkAdapter的子类,并实现以下方法:

  • 返回平台ID的方法:

    + (MMUAdNetworkType)networkType
    {
        return MMUAdNetworkTypeGDT;
    }
    

    此方法和之前介绍的一样,就是需要返回目前适配的平台编号,对于自定义平台,这个是开发者在AFP后台生成的自定义平台编号。

  • 重写基类的load方法。

    + (void)load
    {
     [[MMUSDKSplashNetworkRegistry sharedRegistry] registerClass:self];
    }
    

    此方法是将当前的适配器类注册给AFP SDK,这样AFP SDK就会知道当前支持开屏创意的有哪几个平台,并根据AFP服务下发的配置中的平台列表依次向这些平台请求创意。

  • 重写基类的getAd方法,当AFP SDK尝试向某个实现了开屏样式的第三方平台请求创意的时候会调用此方方法。它做的几个重要的事情如下

    - (void)getAd
    {
       //1,需要调用基类的adSplashWillStartRequest方法,
       //此方法告诉AFP SDK已经找到一个平台,将要开始创意请求。
       [self adSplashWillStartRequest];
       ........
       //2,self.ration是当前适配器获取的针对当前平台的配置信息,它是NSDictinary类型的,主要的成员有:
       //该平台SDK开屏创意请求所需的信息,key值为KEY_NETSET,对于广点通来说value为appid、pid的值。
       NSDictionary *config = [self.ration mmuDictionaryValueForKey:@"netset"];
       NSString *appid = [config mmuStringValueForKey:@"appid"];
       NSString *pid = [config mmuStringValueForKey:@"pid"];
       ......
      //3,获取了广点通开屏创意请求所需要的全部参数,根据这些参数使用广点通的SDK请求开屏创意
      self.splash = [[GDTSplashAd alloc] initWithAppkey:appid placementId:pid];
      self.splash.delegate = self;
      self.splash.backgroundColor = [self launchImgColor];
      //4,通知AFP开屏创意请求已经开始,广点通的特殊逻辑需先要通知AFP请求已经开始
      [self adSplashDidStartRequest];
    }
    

    注意这里的开屏创意请求创意分为“即将开始”和“已经开始”两个步骤,这允许开发者在“即将开始”之后和“已经开始”之前中止请求,比如,可以使用adSplashFailWithError让请求直接结束。

  • 重写基类的startTimeoutTimerWithInterval方法

    - (void)startTimeoutTimerWithInterval:(NSTimeInterval)time
    {
     //获取开屏创意渲染所需的window
     NSDictionary *customReqPams = [self.ration valueForKey:ADAPTER_ADDTION_INFO];
     UIWindow *window = [customReqPams objectForKey:KEY_SPLASH_SUPERWINDOW];
     if (!self.splash || !window || ![window isKindOfClass:[UIWindow class]]) {
         [self adSplashFailWithError:MMUE_Splash_WindowNeed];
         return;
     }
    
     //获取开屏创意渲染所需的window
     NSTimeInterval timeDelay = self.rationEndTime - [[NSDate date] timeIntervalSince1970];
     timeDelay = timeDelay > 0 ? timeDelay : 0;
     self.splash.fetchDelay = (int)((timeDelay > time) ? time :timeDelay);
    
     //监察appLogo决定渲染全屏的开屏还是带Applogo的开屏
     UIView *defaultView = [customReqPams objectForKey:KEY_SPLASH_DEFAULTVIEW];
     if (defaultView)  {
         [self.splash loadAdAndShowInWindow:window withBottomView:defaultView];
     } else {
         [self.splash loadAdAndShowInWindow:window];
     }
    }
    

    此方法是AFP SDK调用的,调用时机是适配器通知平台请求开始之后,参数time,指的是AFP为该平台创意请求分配的时间,因为广点通有自己的请求时间设置接口,所以需要重写此方法。并在这里请求创意。

  • AFP直接停止创意的方法,AFP在某些情况下可以直接停止创意和请求和展现,开发者可以在回调函数中做一些清理操作。
  • 该平台开屏创意请求成功的回调

    - (void)splashAdSuccessPresentScreen:(GDTSplashAd *)splashAd
    {
      //通知AFP该平台开屏陈功
      [self adSplashDidReceiveAd];
      [self adSplashDidPresent];
    }
    
  • 该平台开屏请求失败的回调

    - (void)splashAdFailToPresent:(GDTSplashAd *)splashAd withError:(NSError *)error
    {
      [self adSplashFailWithError:MMUE_PFAdDisplayFailed];
    }
    
  • 该平台开屏创意被点击回调

    - (void)splashAdClicked:(GDTSplashAd *)splashAd
    {
      [self adSplashClicked];
    }
    
  • 该平台开屏其他回调

    //开屏广告将要关闭回调
    - (void)splashAdWillClosed:(GDTSplashAd *)splashAd;
    //开屏广告关闭回调
    - (void)splashAdClosed:(GDTSplashAd *)splashAd;
    //应用进入后台时回调
    - (void)splashAdApplicationWillEnterBackground:(GDTSplashAd *)splashAd;
    //开屏广告点击以后即将弹出全屏广告页
    - (void)splashAdWillPresentFullScreenModal:(GDTSplashAd *)splashAd;
     //开屏广告点击以后弹出全屏广告页
    - (void)splashAdDidPresentFullScreenModal:(GDTSplashAd *)splashAd;
    //点击以后全屏广告页将要关闭
    - (void)splashAdWillDismissFullScreenModal:(GDTSplashAd *)splashAd;
    //点击以后全屏广告页已经关闭
    - (void)splashAdDidDismissFullScreenModal:(GDTSplashAd *)splashAd;
    //开屏广告剩余时间回调
    - (void)splashAdLifeTime:(NSUInteger)time;
    

      如果开发者适配的平台SDK的需要支持一些特殊的回调,可以通过向splashDelegate发消息的形式实现。

powered by Gitbook该文件修订时间: 2017-02-16 17:30:43