## **<center>AFP Android SDK集成指南</center>**

### 1. 简介： 
* 服务简介:
AFP SDK提供了聚合广告、收入
优化的流量托管等多种广告流量售卖方式，让您流量的策略更加灵活，并可以借助我们提供的人群定向、日志和报表分析等服务来获得最大化的收益。
* SDK 简介：
  * 提供 _**<font color='green'>5</font>**_ 种样式:  横幅、全/插屏、开屏、焦点图、信息流。

---

### 2. 建立广告位，获取广告位ID


 * 通过网站创建广告位并配置广告平台，获取广告位ID

### 3. SDK的集成

#### 3.1 SDK 目录结构

 * alimm_core：基础核心包，所有样式必须集成
 * alimm_banner：横幅（Banner）样式包
 * alimm_insert：插屏样式包
 * alimm_welcome：开屏样式包
 * alimm_loopimage：焦点图样式包
 * alimm_feed：信息流样式包
 * alimm_dependency：聚合广告平台依赖包（[对照表](#ad_libs)）

注：除基础核心包必须集成外，其余只需按需集成，需要类库 'android-support-v4.jar'

#### 3.2 导入SDK 所需的文件

1. 将`alimm_core`目录中`libs`子目录下jar包复制到本地工程`libs`子目录下。
2. 将`alimm_core`目录中 `assets/mu/`文件夹中的apk文件添加到本地工程的 `assets/mu/`下。
3. 将欲集成样式相对应的目录中`assets/mu/`文件夹中的apk文件添加到本地工程的 `assets/mu/`下，例如：只集成banner样式，则只需将`alimm_banner`中的apk文件添加到本地工程的 `assets/mu/`下
4. 若使用了聚合广告平台，则需要将相应的聚合平台依赖包添加到本地工程`libs`目录下，例如：使用了百度平台，需要将`alimm_dependency`目录中`libs`子目录下`Baidu_MobAds_SDK_v4.4.jar`复制到本地工程`libs`子目录下。（[对照表](#ad_libs)）

注：不能修改apk文件的名字

#### 3.3 添加渠道 (可选：用户按渠道进行推广)
在`AndroidManifest.xml`文件的`<application>`中添加

##### 3.3.1 添加渠道123 (可选：用户按渠道进行推广)
###### 3.3.2 添加渠道1234 (可选：用户按渠道进行推广)
```
<meta-data android:value="xxxxxxxx" android:name="MUNION_CHANNEL"></meta-data>
```
#### 3.4 添加访问权限
在`AndroidManifest.xml`文件中添加

```
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
```
注意：这里只列出了必须的权限，若使用聚合广告请根据平台需求添加，请从Demo中的`AndroidManifest.xml`文件中查找对应平台需要的权限。

#### 3.5 添加服务
在`AndroidManifest.xml`文件中添加:

```
 <service android:name="com.alimama.mobile.sdk.shell.DownloadingService"
 	android:process=":alimamaDownload">
            <intent-filter>
                <action android:name="com.alimama.mobile.sdk.download.action" />
            </intent-filter>
 </service>
```
#### 3.5 添加应用详情页
在`AndroidManifest.xml`文件中添加:

```
 <activity
       android:name="com.alimama.mobile.sdk.shell.MMUDetail"
       android:configChanges="keyboard|orientation"
       android:launchMode="standard"
       android:screenOrientation="portrait" />
 <activity
       android:name="com.alimama.mobile.sdk.shell.MMUBrowserWebView"
       android:configChanges="keyboard|orientation"
       android:launchMode="standard"
       android:screenOrientation="portrait" >
 </activity>
```
注意：这里只列出了必须要声明的Activity，若使用聚合广告请根据平台需求添加，请从Demo中的`AndroidManifest.xml`文件中查找对应平台需要的声明。

<h4 id="初始化SDK"> 3.6 初始化SDK</h4>

注意：初始化SDK必须在集成样式的页面之前，如果在首页集成样式，请重写Application，并在Application中进行初始化。
```
 MMUSDKFactory.getMMUSDK().init(getApplication());
 MMUSDKFactory.registerAcvitity(BannerActivity.class);//注册集成样式页的Activity
```
注意：所有集成广告的Activity页面都需要注册。

### 4. 选择推广样式

下面列出了SDK所支持的所有样式。

#### 4.1 横幅(banner)

步骤1：确定已添加插件apk（如：Banner_plugin-1.0.apk）到项目工程的 `assets/mu/`目录下

步骤2：确定已添加聚合广告平台依赖包到本地工程的`libs`子目录下（该步骤非必须，只有用到聚合广告平台才需添加）

步骤3：在需要添加样式的布局文件中加入一个ViewGroup来给样式定位

* 例如：

	```
<RelativeLayout
    android:layout_alignParentBottom="true"
    android:id="@+id/bannerParent"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal">
</RelativeLayout>
	```

步骤4：添加广告代码，添加广告代码前请确定已[初始化SDK](#初始化SDK)

* 属性设置接口说明 - BannerProperties
	
	1.构造方法
	
	```
	properties = new BannerProperties(this,slotId, nat);	
	```
	参数说明：slotId：广告位ID，nat：广告展示ViewGroup
	
	2.属性设置
	
	```
	1. properties.setStretch(true); //设置横幅广告宽度是否自适应屏幕
	
   	2. properties.setManualRefresh(false);//设置为手动刷新模式，默认为false，关闭手动刷新模式
   	
   	3. properties.setAcct(MmuProperties.ACCT.VIEW);//设置请求方式，SDK方式：MmuProperties.ACCT.VIEW，SDK-数据方式：MmuProperties.ACCT.DATA，注意：需要和后台广告位设置保持一致
   	
   	4. properties.setMMUListener(adsMogoListener);//设置监听器   	
   	
   	5. properties.addCustomAdapter(id, customAdapter); //添加自定义平台Adapter，只有用到自定义平台功能时需要添加
	
	```
* 加载广告接口说明 - MMUSDK

	```
	mmuSDK = MMUSDKFactory.getMMUSDK();
    mmuSDK.init(getApplication());//初始化SDK,该方法必须保证在集成代码前调用，可移到程序入口处调用
    
    mmuSDK.attach(properties); //通过properties属性，开始加载广告
	```
* 广告控制接口说明 - BannerController

	```
	1. mController =  properties.getController(); //获取横幅控制器
	
	2. mController.load();//加载下一条广告，当设置为手动刷新模式，该方法才生效
	
	3. mController.show(); //展示广告，默认请求广告成功会自动展示
	
	4. mController.close(); //隐藏广告
	
	5. mController.onBackPressed(); //通知展示广告页面关闭，销毁广告
	```



PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.BannerActivity`。

#### 4.2 全/插屏

步骤1：确认已添加插件apk（如：InsertPlugin-1.0.apk）到项目工程的 `assets/mu/`目录下

步骤2：确定已添加聚合广告平台依赖包到本地工程的`libs`子目录下（该步骤非必须，只有用到聚合广告平台才需添加）

步骤3：添加广告代码，添加广告代码前请确定已[初始化SDK](#初始化SDK)

* 属性设置接口说明 - InsertProperties
	
	1.构造方法
	
	```
	properties = new InsertProperties(this,slotId);	
	```
	参数说明：slotId：广告位ID
	
	2.属性设置
	
	```
	 1. properties.setShowMask(true); //设置弹出层背景是否半透明
	 
     2. properties.setCanThrough(false); //设置弹出层背景是否能被点穿,false表示不能被点穿，默认值false
     
     3. properties.setManualRefresh(false);//设置手动刷新模式，false表示不开启手动刷新模式，默认值false
   	
   	 4. properties.setAcct(MmuProperties.ACCT.VIEW);//设置请求方式，SDK方式：MmuProperties.ACCT.VIEW，SDK-数据方式：MmuProperties.ACCT.DATA，注意：需要和后台广告位设置保持一致
   	
   	 5. properties.setMMUInterstitialListener(adsMogoListener);//设置监听器
   	
   	 6. properties.addCustomAdapter(id, customAdapter); //添加自定义平台Adapter，只有用到自定义平台功能时需要添加
	
	```
* 加载广告接口说明 - MMUSDK

	```
	mmuSDK = MMUSDKFactory.getMMUSDK();
    mmuSDK.init(getApplication());//初始化SDK,该方法必须保证在集成代码前调用，可移到程序入口处调用
    
    mmuSDK.attach(properties); //通过properties属性，开始加载广告
	```
* 广告控制接口说明 - InsertController

	```
	1. mController =  properties.getController(); //获取插屏控制器
	
	2. mController.loadAd();//预加载下一条广告，只有开启手动刷新模式时，该方法才生效
	
	3. mController.show(true);//进入展示机会，参数传入true表，示若调用该方法时没有广告缓存，会一直等待到有缓存广告并展示，false表示调用该方法时若， 没有广告缓存，则此次不会展示广告
	
	4. mController.cancel();//取消展示机会，与show方法是成对， 出现的，若在调用show后一直没有广告展示，此时调用cancel方法，show方法失效即该次不会，在展示广告，如：在游戏开始时广告还没有展示出来，需要调用cancel取消展示机会。
	 
	5. mController.close();//关闭插屏广告，广告在屏幕展现时，调用该方法会关闭广告
	```

PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.InsertActivity`。

#### 4.3 信息流

步骤1：确认已添加插件apk（如：FeedPlugin-1.0.apk）到项目工程的 `assets/mu/`目录下

步骤2：确定已添加聚合广告平台依赖包到本地工程的`libs`子目录下（该步骤非必须，只有用到聚合广告平台才需添加）

步骤3：开发者需要创建一个或多个广告位，每个广告位对应一个feed

步骤4：添加广告代码，添加广告代码前请确定已[初始化SDK](#初始化SDK)

* 属性设置接口说明 - MMUFeedProperties
	
	1.构造方法
	
	```
	properties = new MMUFeedProperties(this, slotId);	
	```
	参数说明：slotId：广告位ID
	
	2.属性设置
	
	```
	 
     1. properties.setReqCount(reqCount); //设置请求广告条数，SDK 1.1.0版本以上添加该接口
     
     2. properties.setAdSize(320,100); //设置请求广告尺寸
        	
   	 3. properties.setAcct(MmuProperties.ACCT.VIEW);//设置请求方式，SDK方式：MmuProperties.ACCT.VIEW，SDK-数据方式：MmuProperties.ACCT.DATA，注意：需要和后台广告位设置保持一致
   	
   	 4. properties.setMMUFeedListener(feedListener);//设置监听器
   	
   	 5. properties.addCustomAdapter(id, customAdapter); //添加自定义平台Adapter，只有用到自定义平台功能时需要添加
	
	```
* 加载广告接口说明 - MMUSDK

	```
	mmuSDK = MMUSDKFactory.getMMUSDK();
    mmuSDK.init(getApplication());//初始化SDK,该方法必须保证在集成代码前调用，可移到程序入口处调用
    
    mmuSDK.attach(properties); //通过properties属性，开始加载广告
	```


##### 4.3.1 `SDK`方式集成

* 广告模版接口说明 - MMUFeedController

	```
	1. mController =  properties.getController(); //获取信息流控制器
	
	获取广告模版方式一：
	2. mController.getFeedView(this, adInfos, params);//使用回调中获取的广告数据获取广告View，参数说明,this:Activity,adInfo:List<MMUAdInfo> 一组广告数据,params:LayoutParams
	
	获取广告模版方式二：
	3. mController.getFeedView(this, adInfo, params);//使用回调中获取的广告View，参数说明,this:Activity,adInfo:MMUAdInfo 一个广告数据,params:LayoutParams，SDK 1.1.0版本以上支持
	
	```
	说明：方式一为获取`小图排列模版`，方式二为获取其他模版，对应后台配置模版
	
* 视频广告说明

	```
	1. 视频广告模版支持Android 4.0及以上版本
	
	2. 视频广告划出屏幕后，需要手动remove掉视频模版View以释放资源
	```
	注意：SDK 1.1.0及以上版本支持视频模版
	
* 模版id说明 - MMUAdInfo.rtid

	| rtid值   | 模版类型        | 版本说明 |
	| -------- |:-------------:||
	|1         |标题大图            ||
	|9         |小图描述         ||
	|3或10      |小图排列         ||
	|11        |视频            |1.1.0及以上|
	
PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.MMUFeedViewActivity`。

##### 4.3.2 `SDK-数据`方式集成

* 数据接口说明 - MMUAdInfo

	```
	1. adInfo.attachAdView(view); //当广告展示时，必须调用attachAdView()方法并传入展示的View
	
	2. adInfo.onClickAd(); //当广告被点击时，必须调用onClickAd()方法
	
	3. adInfo.onDestroy(); //当广告被销毁时调用onDestroy()方法
	
	4. adInfo.getContentValue(key); //调用getContentValue(),通过key获取对应的数据
	
	5. adInfo.notifyVideoOnStart(); //通知视频开始播放
	
	6. adInfo.notifyVideoOnComplete(); //通知视频播放完成
	
	7. adInfo.onEvent(int eventId,String eventMsg); //自定义事件上报
	```
	
* 信息流数据接口Key－Value说明

| Key                       | Value         | 版本说明 |
| ------------------------- |-------------:||
| MMUAdInfoKey.TITLE        | 标题            ||
| MMUAdInfoKey.SUBTITLE     | 副标题           ||
| MMUAdInfoKey.PRICE        | 价格             ||
| MMUAdInfoKey.PROMOPRICE   | 折扣价           ||
| MMUAdInfoKey.SELL         | 销量             ||
| MMUAdInfoKey.IMG_SIZE     | 图片大小          ||
| MMUAdInfoKey.LINK         | 点击地址，当地址为空或空字符串时不需要处理         ||
| MMUAdInfoKey.CLICKTYPE    | 点击类型          ||
| MMUAdInfoKey.RATING       | 星级             ||
| MMUAdInfoKey.IMAGE_URL    | 图片地址          ||
| MMUAdInfoKey.ICON_URL     | Icon地址         ||
| MMUAdInfoKey.RATION_NAME  | 平台名称          ||
| MMUAdInfoKey.MODEL_TYPE   | 模版类型          ||
| MMUAdInfoKey.VIDEO_URL    | 视频地址          | 1.1.0 及以上|
| MMUAdInfoKey.AUTO_PLAY    | 播放控制，1:手动播放、2:自动播放、3:仅WIFI自动播放 | 1.1.0 及以上|
| MMUAdInfoKey.VIDEO_TIME   | 视频播放时长      | 1.1.0 及以上|

* 数据接口补充字段说明 － adInfo.getContent()

	| 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “cid”       | String           | 广告创意ID|
| “provider”       | Map类型            | 创意广告商|

* 字段 provider结构说明

	 | 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “name”       | String           | 广告商名称	|
| “icon”       | Map类型           | 广告商角标信息|

* 字段 icon结构说明

	 | 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “icu”       | String           | 角标图片地址	|
| “icpos”       | int           | 角标位置 |
| “icsz”       | Map           | 角标尺寸 |


PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.MMUFeedDataActivity`。

#### 4.6 开屏

步骤1：确认已添加插件apk（如：WelcomePlugin-1.0.apk）到项目工程的 `assets/mu/`目录下

步骤2：确定已添加聚合广告平台依赖包到本地工程的`libs`子目录下（该步骤非必须，只有用到聚合广告平台才需添加）

步骤3：添加广告代码，添加广告代码前请确定已[初始化SDK](#初始化SDK)

* 属性设置接口说明 - WelcomeProperties
	
	1.构造方法
	
	```
	properties = new WelcomeProperties(context, slotId,
				1000, 3000,adsMogoWelcomeListener );	
	```
	参数说明：slotId：广告位ID,adsMogoWelcomeListener:监听器
	
	2.属性设置
	
	```
	 
     1. properties.setWelcomeContainer(handleContainer);//设置开屏广告展示容器
          
     2. properties.setStyle(style); //设置开屏广告展示的样式，如：是否展示状态栏
        	
   	 3. properties.setAcct(MmuProperties.ACCT.VIEW);//设置请求方式，SDK方式：MmuProperties.ACCT.VIEW，SDK-数据方式：MmuProperties.ACCT.DATA，注意：需要和后台广告位设置保持一致
   	
   	 4. properties.setAnimations(animation);//设置开屏展示动画
   	
   	 5. properties.addCustomAdapter(id, customAdapter); //添加自定义平台Adapter，只有用到自定义平台功能时需要添加
	
	```
* 加载广告接口说明 - MMUSDK

	```
	mmuSDK = MMUSDKFactory.getMMUSDK();
    mmuSDK.init(getApplication());//初始化SDK,该方法必须保证在集成代码前调用，可移到程序入口处调用
    
    mmuSDK.attach(properties); //通过properties属性，开始加载广告
	```



##### 4.6.1 `SDK`方式集成
* 设置说明

	```
	1. properties.setWelcomeContainer(handleContainer);//设置开屏广告展示容器,必需设置不可以为null
	
	2. properties.setAcct(MmuProperties.ACCT.VIEW);//设置请求方式，注意：后台广告位设置必需为“SDK”
	```
PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.WelcomeActivity`。

##### 4.6.2 `SDK-数据`接口方式集成

* 设置说明

	```
	1. properties.setAcct(MmuProperties.ACCT.DATA);//设置请求方式，注意：后台广告位设置必需为“SDK-数据”
	```

* 数据接口说明 - MMUAdInfo

	```
	1. adInfo.attachAdView(view); //当广告展示时，必须调用attachAdView()方法并传入展示的View
	
	2. adInfo.onClickAd(); //当广告被点击时，必须调用onClickAd()方法
	
	3. adInfo.onDestroy(); //当广告被销毁时调用onDestroy()方法
	
	4. adInfo.getContentValue(key); //调用getContentValue(),通过key获取对应的数据
	```


* 开屏数据接口Key－Value说明

	| Key                       | Value         |
| ------------------------- |:-------------:|
| MMUAdInfoKey.DISPLAY_TIME | 广告展示时间     |
| MMUAdInfoKey.IMAGE_URL    | 图片地址        |
| MMUAdInfoKey.LINK         | 点击地址        |
| MMUAdInfoKey.CLICKTYPE    | 点击类型        |
| MMUAdInfoKey.RATION_NAME  | 平台名称        |

* 数据接口补充字段说明 － adInfo.getContent()

	| 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “cid”       | String           | 广告创意ID|
| “provider”       | Map类型            | 创意广告商|

* 字段 provider结构说明

	 | 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “name”       | String           | 广告商名称	|
| “icon”       | Map类型           | 广告商角标信息|

* 字段 icon结构说明

	 | 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “icu”       | String           | 角标图片地址	|
| “icpos”       | int           | 角标位置 |
| “icsz”       | Map           | 角标尺寸 |


PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.WelcomeDataActivity`。

#### 4.7 焦点图

步骤1：确认已添加插件apk（如：LoopImagePlugin-1.0.apk）到项目工程的 `assets/mu/`目录下

步骤2：在需要添加样式的布局文件中加入一个ViewGroup来给样式定位

* 示例

	```
<android.support.v4.view.ViewPager
        android:id="@+id/loop"
        android:layout_width="fill_parent"
        android:layout_height="140dp" />        
```

步骤3：添加广告代码，添加广告代码前请确定已[初始化SDK](#初始化SDK)

* 属性设置接口说明 - LoopImageProperties
	
	1.构造方法
	
	```
	properties = new LoopImageProperties(this,slotId);	
	```
	参数说明：slotId：广告位ID
	
	2.属性设置
	
	```
	 
     1. properties.setContainer(nat);//设置焦点图广告展示容器
          
     2. properties.setMmuLoopImageListener(listener); //设置监听器
        	
   	 3. properties.setAcct(MmuProperties.ACCT.VIEW);//设置请求方式，SDK方式：MmuProperties.ACCT.VIEW，SDK-数据方式：MmuProperties.ACCT.DATA，注意：需要和后台广告位设置保持一致
   	
   	 4. properties.addCustomAdapter(id, customAdapter); //添加自定义平台Adapter，只有用到自定义平台功能时需要添加
	
	```
* 加载广告接口说明 - MMUSDK

	```
	mmuSDK = MMUSDKFactory.getMMUSDK();
    mmuSDK.init(getApplication());//初始化SDK,该方法必须保证在集成代码前调用，可移到程序入口处调用
    
    mmuSDK.attach(properties); //通过properties属性，开始加载广告
	```



##### 4.7.1 `SDK`方式集成

* 设置说明

	```
	1. properties.setContainer(nat);//设置焦点图广告展示容器,必需设置不可以为null
	
	2. properties.setAcct(MmuProperties.ACCT.VIEW);//设置请求方式，注意：后台广告位设置必需为“SDK”
	```

PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.LoopImageActivity`。

##### 4.7.2 `SDK-数据`接口方式集成

* 设置说明

	```
	1. properties.setAcct(MmuProperties.ACCT.DATA);//设置请求方式，注意：后台广告位设置必需为“SDK-数据”
	```

* 数据接口说明 - MMUAdInfo

	```
	1. adInfo.attachAdView(view); //当广告展示时，必须调用attachAdView()方法并传入展示的View
	
	2. adInfo.onClickAd(); //当广告被点击时，必须调用onClickAd()方法
	
	3. adInfo.onDestroy(); //当广告被销毁时调用onDestroy()方法
	
	4. adInfo.getContentValue(key); //调用getContentValue(),通过key获取对应的数据
	```


* 焦点图数据接口Key－Value说明

	| Key                       | Value         |
| ------------------------- |:-------------:|
| MMUAdInfoKey.DISPLAY_TIME | 广告展示时间     |
| MMUAdInfoKey.IMAGE_URL    | 图片地址        |
| MMUAdInfoKey.LINK         | 点击地址        |
| MMUAdInfoKey.CLICKTYPE    | 点击类型        |
| MMUAdInfoKey.RATION_NAME  | 平台名称        |

* 数据接口补充字段说明 － adInfo.getContent()

	| 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “cid”       | String           | 广告创意ID|
| “provider”       | Map类型            | 创意广告商|

* 字段 provider结构说明

	 | 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “name”       | String           | 广告商名称	|
| “icon”       | Map类型           | 广告商角标信息|

* 字段 icon结构说明

	 | 字段名                      | 类型         | 描述 |
| ------------------------- |:-------------:||
| “icu”       | String           | 角标图片地址	|
| “icpos”       | int           | 角标位置 |
| “icsz”       | Map           | 角标尺寸 |


PS：更多设置请参考Demo中集成代码,`com.alimama.mobile.demo.LoopImageDataActivity`。

### 5.自定义广告平台

#### 5.1 简介
 * 媒体可以通过自定义广告平台功能，添加自己使用的广告平台到AFP中，实现多广告平台的统一管理。
 * 集成步骤:
 
 	```
	 1) 在AFP网站端新建自定义平台
 	 2) 在对应的广告位上，配置新建的三方平台信息，并获取平台ID
 	 3) 按照AFP SDK的协议，实现自定义平台adapter
 	 4) 添加adapter到AFP
 	```

#### 5.2 新建自定义平台
* 示例:
 
	![](https://gw.alicdn.com/tps/TB1pyzzKFXXXXXWXpXXXXXXXXXX-1000-686.png =600x)

#### 5.3 配置平台信息
* 示例:
 
	![](https://gw.alicdn.com/tps/TB1b9DuKFXXXXaTXpXXXXXXXXXX-1000-535.png =600x)


#### 5.4 Adapter代码实现说明
* 横幅Banner(MMUBannerCustomAdapter)
	
	需要继承 MMUBannerCustomAdapter，并实现以下事件
	
	```
	/**
	 * 开始请求单一平台广告方法
	 */
	public abstract void startRequestAd();

	/**
	 * 展示完毕销毁单一平台广告方法
	 */
	public abstract void onFinishClearCache();
	
	/**
	 * 将单一平台的广告视图传递给AFPSDK，由AFPSDK将其添加到界面中
	 * @param adView 单一平台的广告
	 */
	public void addAdView(ViewGroup adView);

	/**
	 * 返回在服务器端配置的APPID,以json字符串返回
	 * 
	 * @return 配置的value
	 */
	public String getAPPID() ;

	/**
	 * 获取当前activity对象
	 * @return
	 */
	public Activity getMMUActivity();

	/**
	 * 提供给开发者调用的 通知AFPSDK广告请求展示失败
	 */
	public void notifyMMUAdRequestAdFail();

	/**
	 * 提供给开发者调用的 通知AFPSDK广告展示成功
	 */
	public void notifyMMUAdRequestAdSuccess();
	
	```
	参考Demo，`com.alimama.mobile.demo.custom.BaiduBannerAdapter`

* 插屏(MMUInterstitialCustomAdapter)
	
	需要继承 MMUInterstitialCustomAdapter，并实现以下事件
	
	```
	/**
	 * 开始请求单一平台广告方法
	 */
	public abstract void startRequestAd();
	
	/**
	 * 开始展示单一平台广告方法
	 */
	public abstract void startShowAd();

	/**
	 * 展示完毕销毁单一平台广告方法
	 */
	public abstract void onFinishClearCache();
	
	/******************************** 提供用户直接调用的方法 *****************************************************/
	
	/**
	 * 返回在服务器端配置的APPID,以json字符串返回
	 * 
	 * @return 配置的value
	 */
	public String getAPPID() ;

	/**
	 * 获取当前activity对象
	 * @return
	 */
	public Activity getMMUActivity();
	
	/**
	 * 提供给开发者调用的 通知AFPSDK广告被点击
	 */
	public void notifyMMUAdClicked();
	
	/**
	 * 提供给开发者调用的 通知AFPSDK广告被关闭
	 */
	public void notifyMMUAdCloseed();

	/**
	 * 提供给开发者调用的 通知AFPSDK广告请求展示失败
	 */
	public void notifyMMUAdRequestAdFail() ;

	/**
	 * 提供给开发者调用的 通知AFPSDK广告请求成功
	 */
	public void notifyMMUAdRequestAdSuccess();
	
	/**
	 * 提供给开发者调用的 通知AFPSDK广告展示成功
	 */
	public void notifyMMUAdShowSuccess() ;
	
	```
	参考Demo，`com.alimama.mobile.demo.custom.BaiduInsertAdapter`

* 信息流(MMUFeedCustomAdapter)
	
	需要继承 MMUFeedCustomAdapter，并实现以下事件
	
	```
	/**
	 * 开始请求单一平台广告方法
	 */
	public abstract void startRequestAd();
	
	/******************************** 提供用户直接调用的方法 *****************************************************/
	
	/**
	 * 添加信息流数据
	 * 
	 * @param adInfo 数据结构
	 * @param adInfoStateReporter 平台展示和点击上报实现
	 */
	public void addMMUAdInfo(HashMap<String, Object> adInfo,MMUAdInfoStateReporter adInfoStateReporter);

	/**
	 * 返回在服务器端配置的APPID,以json字符串返回
	 * 
	 * @return 配置的value
	 */
	public String getAPPID();

	/**
	 * 获取当前activity对象
	 * @return
	 */
	public Activity getMMUActivity();

	/**
	 * 提供给开发者调用的 通知AFPSDK广告请求展示失败
	 */
	public void notifyMMUAdRequestAdFail();

	/**
	 * 提供给开发者调用的 通知AFPSDK广告展示成功
	 */
	public void notifyMMUAdRequestAdSuccess();
	
	```
	参考Demo，`com.alimama.mobile.demo.custom.BaiduFeedAdapter`

* 开屏(MMUWelcomeCustomAdapter)
	
	需要继承 MMUWelcomeCustomAdapter，并实现以下事件
	
	```
	/**
	 * 开始请求单一平台广告方法
	 */
	public abstract void startRequestAd();

	/**
	 * 展示完毕销毁单一平台广告方法
	 */
	public abstract void onFinishClearCache();
	
	/******************************** 提供用户直接调用的方法 *****************************************************/
	
	/**
	 * 返回在服务器端配置的APPID,以json字符串返回
	 * 
	 * @return 配置的value
	 */
	public String getAPPID();

	/**
	 * 获取当前activity对象
	 * @return
	 */
	public Activity getMMUActivity();
	
	/**
	 * 返回广告容器，需要把容器加到window上面展示
	 * @return
	 */
	public ViewGroup getViewContainer() ;
	
	/**
	 * 返回广告容器中广告的区域view
	 * @return
	 */
	public ViewGroup getAdView();
	
	
	/**
	 * 提供给开发者调用的 通知AFPSDK广告被点击
	 */
	public void notifyMMUAdClicked() ;
	
	/**
	 * 提供给开发者调用的 通知AFPSDK广告被关闭
	 */
	public void notifyMMUAdCloseed();

	/**
	 * 提供给开发者调用的 通知AFPSDK广告请求展示失败
	 */
	public void notifyMMUAdRequestAdFail() ;
	
	/**
	 * 提供给开发者调用的 通知AFPSDK广告展示成功
	 */
	public void notifyMMUAdShowSuccess() ;
	
	```
	参考Demo，`com.alimama.mobile.demo.custom.BaiduWelcomeAdapter`

#### 5.5 添加Adapter到AFP	 

```	
自定义广告平台Adapter实现完成后，在初始化广告样式时通过以下方式添加Adapter，
示例:
	properties.addCustomAdapter(id, adapter);
	id: 在后台新建自定义平台后获取的平台id
	adapter: 媒体实现的自定义平台adapter
```
参考Demo，`com.alimama.mobile.demo.BannerActivity`

### 6. 备注

#### 6.1 媒体自定义标签

```
媒体自定义标签可以通过广告样式的properties.setTag(tag)的方式来添加。

其中 tag 格式为 属性:标签,标签，.... 多组属性使用分号隔开

```


#### 6.2 权限说明

<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tbody><tr>
    <th scope="col" width="300">权限</th>
    <th scope="col">用途</th>

  </tr>
  <tr>
    <td>android.permission.INTERNET</td>
    <td>允许应用程序联网，以便向我们的服务器端发送数据。</td>
  </tr>
  <tr>
    <td>android.permission.ACCESS_NETWORK_STATE</td>

    <td>获取用户手机的IMEI，用来唯一的标识用户。(如果您的应用会运行在无法读取IMEI的平板上，我们会将mac地址作为用户的唯一标识，请添加权限： android.permission.ACCESS_WIFI_STATE )</td>
  </tr>
  <tr>
    <td>android.permission.READ_PHONE_STATE</td>
    <td>检测网络状态</td>
  </tr>

  <tr>
    <td>android.permission.WRITE_EXTERNAL_STORAGE</td>
    <td>将更新的APK临时存在SD卡里。</td>
  </tr>
</tbody></table>

<h4 id="ad_libs"> 6.3 广告平台依赖包对应表</h4>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tbody><tr>
    <th scope="col" width="300">广告平台</th>
    <th scope="col">依赖包</th>
  </tr>
  <tr>
    <td>阿里妈妈</td>
    <td>-</td>
  </tr>
  <tr>
    <td>百度</td>
    <td>Baidu_MobAds_SDK_v5.6.jar</td>
  </tr>
  <tr>
    <td rowSpan="2">广点通</td>
    <td>GDTUnionSDK.4.8.517.min.jar</td>
  </tr>
  <tr>
    <td>android-support-v4.jar</td>
  </tr>
  <tr>
    <td>AdMob</td>
    <td>google-play-services-v8.4.87.jar</td>
  </tr>
  <tr>
    <td>Inmobi</td>
    <td>InMobi-5.2.1.jar</td>
  </tr>  
  <tr>
    <td>亿动智道</td>
    <td>SmartMad-SDK-Android_v3.0.4.jar</td>
  </tr>
  <tr>
    <td rowSpan="8">安沃</td>
    <td>Adwo_Android_SDK6.2.jar</td>
  </tr>
  <tr>
    <td>assets/libadwo60.png</td>
  </tr>
  <tr>
    <td>armeabi/libAdwoLocker.so</td>
  </tr>
  <tr>
    <td>armeabi/libImmHapticMedia.so</td>
  </tr>
  <tr>
    <td>arm64-v8a/libAdwoLocker.so</td>
  </tr>
  <tr>
    <td>arm64-v8a/libImmHapticMedia.so</td>
  </tr>
  <tr>
    <td>armeabi-v7a/libAdwoLocker.so</td>
  </tr>
  <tr>
    <td>armeabi-v7a/libImmHapticMedia.so</td>
  </tr>
  <tr>
    <td>多盟</td>
    <td>domob_v4.6.4.jar.jar</td>
  </tr>
</tbody></table>
注意：`-`代表不需要添加依赖包

#### 6.4 混淆

```
-dontwarn android.taobao.**
-dontwarn com.taobao.**
-dontwarn com.alimama.mobile.**
-dontwarn  android.app.**
-dontwarn android.support.v4.**

-keepattributes Signature
-keepattributes *Annotation*

-keep class com.taobao.** {*; }
-keep class com.alimama.**{*; }
-keep class com.alimama.mobile.**{*; }
-keep class android.taobao.** {*; }
-keep class android.support.v4.** { *; }
-keep class android.app.**{*;}
-keep class **.R$* {*;}
```

### 7. 技术支持
请发邮件至<afpsupport@list.alibaba-inc.com>，我们会尽快回复您。