Android SDK

倾然丶 夕夏残阳落幕 提交于 2021-02-13 19:01:45

一、Android SDK植入流程

1. 导入广告平台的SDK

请参照以下步骤导入AdsMOGO SDK及您想要使用的各广告平台SDK。

1.1 在项目的根目录新建libs文件夹。

1.2 右键单击新建的libs文件夹,在弹出窗口中,选择Import-> General-> File System,完成操作后,点击“next”按钮,进入下一步。如图所示:

1.3 找到AdsMOGO_Android_SDK_1.2.6/libs文件夹路径,右侧选中芒果SDK(AdsMOGO_SDK_Android.jar)和您要使用的广告平台SDK,选中Create selected folders only,点击完成按钮,如图所示:

注:关于各jar包对应哪个广告平台,请查看Android SDK下载包中“Android-jar包对应平台列表.pdf”文件或是论坛经验交流中“使用问题汇总”帖的“20、Android-jar包对应平台列表”

**强烈建议开发者在使用芒果Android SDK v1.2.6时,添加与该版本一同发布的单一平台SDK(Android SDK下载包中libs.zip),不要使用1.2.5及以前版本提供的单一平台SDK,以免为您带来不必要的麻烦。

1.4 选中libs文件夹中所有jar包,单击右键->Build Path->Add to Build Path,
如图所示:

现在您已成功导入广告平台的SDK。请继续“添加用户权限“的操作。

2. 添加用户权限

您已成功导入芒果SDK及各广告平台SDK,现在让我们开始“添加用户权限”。
如图所示:

所需代码:(参考AdsMogoDemo/AndroidManifest.xml文件)
<!-- 添加用户权限-->
<!-- 连接网络权限INTERNET ,用于请求广告(必须) -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 读取手机基本信息权限READ_PHONE_STATE,用于精确统计用户的机型等信息(必须) -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 读取网络信息权限ACCESS_NETWORK_STATE,用于识别gprs网络的接入点的情况(必须) -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 获取用户地理信息权限,用于帮助精确统计开发者的程序发布之后的用户分布情况-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission
android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 读写sd 卡的权限,用于缓存广告所用到的图片,节省流量,并可获得更好的用户体验-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--如果添加的自助广告为电话类型,则需要电话权限,点击广告可以直接跳转到拨打电话页面-->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!—获得当前wifi的状态,微云广告平台需要此权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!—按效果付费功能需要的权限 -->
<uses-permission android:name="android.permission.GET_TASKS />
<!-- Vpon所需权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<!-- 微云所需权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--suizong -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

 注:您必须添加以下两个权限,否则无法获取广告。
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
注:当您用到下载应用功能时,请添加以下两个权限。
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE

3.为部分广告平台声明Activity

使用AdsMOGO SDK必须要声明MOGO的Activity。如果您使用帷千、A立方、有米、多盟、安沃、Vpon、AdMob、AdChina、AppMedia、赢告、Greystripe、MdotM、Millennial Media、AirAD、LSense、MobWIN等广告平台,您必须为它们声明Activity,才可以正常使用。

请选择添加以下代码到AndroidMainfest.xml文件中的application标签中:
(参考AdsMogoDemo/AndroidManifest.xml文件)
<!-- 声明Mogo的Activity -->
<activity android:name="com.adsmogo.adview.AdsMogoWebView" android:label="@string/app_name" >
<!-- 注册Service,自主广告与交换广告的应用下载功能所需 -->
<service android:name="com.adsmogo.controller.service.UpdateService" android:exported="true" android:process=":remote" />
<!-- 注册Service,安装应用所用 -->
<service android:name="com.adsmogo.controller.service.CountService" android:exported="true" android:process=":remote" />
<!-- 声明AdMob的Activity -->
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout |uiMode|screenSize|smallestScreenSize" />
<!-- 声明有米的Activity和receiver -->
<activity android:name="net.youmi.android.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation"/>
<!-- 声明多盟的Activity -->
<activity android:name="cn.domob.android.ads.DomobActivity" android:theme="@android :style/Theme.Translucent" />

  注:由于声明Activity的代码过多,这里只将特殊的广告平台列举出来,其它的平台可参考芒果提供的Sample。
* 如果您用到芒果自有广告(自主,交换,自售广告)及原生整合的广告平台(后台App配置平台中标有 图标)的下载应用功能,请注册以下Service。
com.adsmogo.controller.service.UpdateService
com.adsmogo.controller.service.CountService
* 如果您使用到了Vpon广告平台,操作步骤请参考芒果提供的《Vpon帮助文档.txt》,也可参照Vpon的在线帮助文档。
* 使用Google AdMob 广告 SDK(Android 版)要求采用 Android 1.5 或更高版本。请确保您使用的是最新版本的 Android SDK,且编译所针对的至少是 Android v3.2(将 default.properties 中的 target 设置为 android-13)。
* 使用adwo广告平台3.1版本需要在AndroidManifest.xml中的application标签中添加android:hardwareAccelerated="true"

4.植入横幅广告

方式一:通过配置XML加载广告

在XML布局文件中添加广告,设置您的芒果ID,如图所示:

所需代码:(请参考AdsMogoDemo/res/layout/xml_type.xml文件)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:adsmogo="http://www.adsmogo.com" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000" >
<!-- 显示广告的Layout -->
<com.adsmogo.adview.AdsMogoLayout android:id="@+id/adsMogoView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="0dp" adsmogo:appid="您App的芒果ID" adsmogo:express_mode="false" />
</RelativeLayout> 

方式二:通过代码方式添加广告

在代码中添加广告,设置您的芒果ID,如图所示:

在需要展示广告的Activity的OnCreate方法放置以下代码:
(参考AdsMogoDemo/src/com/adsmogo/demo/CodeTypeAdActivity.java文件)

/** 代码方式添加广告,如果您使用XML配置方式添加广告,不需要以下代码 **/
AdsMogoLayout adsMogoLayoutCode = new AdsMogoLayout(this, mogoID, expressMode);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
// 设置广告出现的位置(悬浮于底部)
params.bottomMargin = 0;
adsMogoLayoutCode.setAdsMogoListener(this);
params.gravity = Gravity.BOTTOM;
addContentView(adsMogoLayoutCode, params);
/*********************** 代码添加广告结束 ************************/

5.植入全屏广告

全屏广告是一种新兴的广告形式。您可以在App中植入全屏广告。在需要显示全屏广告的Activity中添加如下代码即可:

方式一:
AdsMogoLayout adMogoLayoutFull = new AdsMogoLayout(this,"您App的芒果ID", AdsMogoTargeting.GETINFO_FULLSCREEN_AD );
FrameLayout.LayoutParams paramsFull = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
addContentView(adMogoLayoutFull, paramsFull);
方式二:
AdsMogoLayoutadsMogoLayoutFull=newAdsMogoLayout(this,mogoID, adsMogoTargeting.GETINFO_FULLSCREEN_AD);
adsMogoLayoutFull.setAdsMogoListener(adlistener);
adsMogoLayoutFull.startFullAD(Invoker.this);

  全屏广告分为手动关闭和一定时间内自动消失两种状态。不会像横幅广告一样轮换展示。初始化一次AdsMogoLayout只展示一次全屏广告,用户点击关闭按钮则永久关闭全屏广告。

6.释放资源

开发者需要在启动的第一个Activity的onDestroy方法中调AdsMogoLayout.clear()和adsMogoLayoutCode.clearThread()方法用于释放资源和线程池。

代码如下:
@Override
protected void onDestroy() {
AdsMogoLayout.clear();
// 清除 adsMogoLayout 实例 所产生用于多线程缓冲机制的线程池
// 此方法请不要轻易调用,如果调用时间不当,会造成无法统计计数
adsMogoLayoutCode.clearThread();
super.onDestroy();
}

7.获取广告状态

芒果SDK向开发者提供了获取广告状态的通知接口AdMogoListener,开发者可以通过实现此接口来获得以下三种广告状态。

onRequestAd(String adName):当每次去请求单一平台的广告时被调用(adName为当前请求广告的平台名称)

onReceiveAd(ViewGroup adView,String adName):当成功接收广告时被调用(adView为当前获取到的广告视图,adView有可能为空。adName为当前获取到的广告的平台名称)

onFailedReceiveAd():当接收广告失败时被调用

onClickAd(String adName):当用户点击广告并记录点击数时被调用(adName为当前点击广告的平台名称)

onRealClickAd():当用户点击广告时被调用

onCloseAd():当用户点击关闭按钮时被调用。 此方法return false则广告关闭,return true广告将不会关闭。

onCloseMogoDialog():当用户关闭dialog时被调用(只适用于芒果自己的广告)

getCustomEvemtPlatformAdapterClass(AdsMogoCustomEventPlatformEnum enumIndex): 为自定义平台使用,获取用户自定义Adapter Class

实现方式:
public class YourActivity extends Activity implements AdsMogoListener{
...
adMogoLayout.setAds MogoListener(this);
...
}

您可根据这些状态,让您的App和广告更紧密的整合互动,例如:用户点击广告时,您可以使游戏变为暂停状态。

8.添加混淆配置文件(可选)

芒果SDK支持基于Android2.3.3自带的混淆机制,只适用于导出apk文件时,并且此文件只针对AdsMOGO_Android_SDK_1.2.6.jar的混淆配置。

您可以在这里下载混淆配置文件,复制到您当前项目的根目录下。混淆的过程如下:

1、下载混淆文件,文件名为proguard.cfg;
2、把下载下来的文件拷贝到您工程的根目录下;
3、在default.properties文件中填写如下代码:
     proguard.config=proguard.cfg 
4、保存完成。

注:Android SDK 1.2.1以后版本是全新的混淆配置文件,之前的文件与v1.2.1以后版本不兼容,请重新下载添加。

9.配置离线文件“mogoID.config”(可选)

功能简介:

在芒果网站配置好广告平台后,可以下载对应的广告配置离线文件,导入到工程中和芒果 SDK 配合使用。当新用户第一次使用您的应用,手机与芒果服务器信息交互异常,无法获取广告配置时,即可调用离线文件,以便实现正常展示广告。

使用方法:

1)配置完广告平台后,选择SDK下载,点击[离线配置文件下载],下载的文件格式为.config,如 图所示:

2)将下载的离线配置文件导入到项目assets文件夹中,如图所示:

10.芒果新增功能(可选)

1)对于芒果日志的控制

AndroidSDK 1.2.1以后的SDK默认是不显示日志的,显示日志有两种方式:
第一种:在手机sd卡中放置/sdcard/Mogo/log.mogo文件;
第二种:在请求广告之前添加代码com.adsmogo.util.L.debug=true;

2)对于芒果广告和一些原生聚合平台直接下载类广告“下载确认窗口”的控制

AndroidSDK 1.2.2以后直接下载类广告点击会直接下载,无下载确认窗口提示。 设置开启下载弹窗方法如下:adsMogoLayout. downloadIsShowDialog=true;

3)修改了关闭广告的用户控制接口

// return false 则广告关闭 return true 广告将不会关闭
@Override
public boolean onCloseAd() {
if(closeAd){
// return false 则广告关闭
return false;
}else{
// return true 广告将不会关闭
return true;
}
}

4)添加了关闭应用内全部广告接口

//设置关闭当前广告(请在广告初始化之前调用,如果广告已经展示不能强行关闭)
adsMogoLayoutCode.setADEnable(true);
//设置打开当前广告(请在广告初始化之前调用,如果广告已经展示不能强行打开)
adsMogoLayoutCode.setADEnable(false);
//设置关闭当前应用中的所有广告(请在广告初始化之前调用,如果广告已经展示不能强行关闭)
adsMogoLayoutCode.setAllADEnable(true);
//设置打开当前应用中的所有广告(请在广告初始化之前调用,如果广告已经展示不能强行打开)
adsMogoLayoutCode.setAllADEnable(false);

恭喜您,完成了上述几个操作步骤后,您已成功植入了AdsMOGO Android SDK。现在运行您的App,就可以看到广告。接下来您可以进行测试工作,芒果完美支持真机和模拟器两种测试方式。


二、芒果高级功能

1.快速模式

功能简介:

开启快速模式后,SDK会优先调用本地缓存中保存的广告配置,在应用初始时据此展示广告,这样缩短了应用初始化时显示广告的时间;与此同时在芒果服务器获取最新广告配置。如果您在芒果网站中更新了广告配置,在第一轮广告(即根据缓存中广告配置展示的广告)展示完毕后,则会根据新配置展示广告。开启快速模式,可以实现最快速度展示广告。

关闭快速模式时在应用初始化时立刻去芒果服务器获得最新广告配置并将广告显示在界面上,这种方式在初始化时就获得了最新的广告配置。

您可以根据需要选择上述两种展示广告模式。

使用方法:
初始化AdsMogoLayout时传递一个boolean变量用来设置是否开启快速模式。默认为True
new AdsMogoLayout(this, mogoID, expressMode);

2.地域优化

功能简介:

根据用户所处地理位置来判断并向其推送最合适的广告。此功能默认开启。

3.点击优化

功能简介:

此功能聚合了来自芒果实验室的一系列广告优化逻辑,能够在理论上提升广告的点击数和点击率,进而提升您的广告收入。

比如,开启点击优化,用户点击广告处理一些事件后,返回展示广告的视图,立刻请求下一个 广告,最大程度上节省了轮换广告的等待时间。关闭点击优化,用户点击广告后返回到展示广告视图,等到一轮的刷新时间到了才请求下一个广告。

4.关闭广告

功能简介:

开启关闭广告,您的广告位右侧将会出现一个半透明的‘X’按钮,用户可以点击来暂时关闭 此广告位。用户下次使用您的App时,广告位会恢复出现。

地域优化、点击优化、关闭广告这三项的位置开关如下图(红色框位置):

5. 位置获取

功能简介:

开启位置获取,可以获得更精确的地域优化推送的广告,既精确确定用户所在位置,并根据这 个位置推送合适的广告。此功能默认开启。

6. 过场效果

功能简介:

新加载广告时的轮换动画效果。所支持的效果选项如图:

位置获取、过场效果这两项功能位置如下图:

三、常见问题

1. 为什么多盟广告有时候不能正常显示?

多盟的广告不显示,原因可能是用户设置的广告区域过小,因为多盟要求广告高度不小于48px,一旦小于此高度就会抛出异常。异常代码如下:

DomobSDK(574): Cannot display ad because its container is too small. The ad is 48 pixels tall but is only given 45 at most to draw into. Please make your view containing DomobAdView taller.

2. 使用芒果SDK之后,我的代码可以混淆吗?

芒果SDK支持基于Android2.3.3自带的混淆机制,只适用于导出apk文件时。

您可以在这里下载混淆配置文件,复制到您当前项目的根目录下。混淆的过程如下:

1、下载混淆文件,文件名为proguard.cfg;

2、把下载下来的文件拷贝到您工程的根目录下;

3、在default.properties文件中填写如下代码:

proguard.config=proguard.cfg

4、保存完成。

什么是代码混淆?

混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得 出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简 短的英文字母代号,在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永 久丢失,这些信息的丢失使程序变得更加难以理解。

3. AdMob填充率太低,总有空广告位,我该怎么配置?

您可以将AdMob的投放量设为100%,再开几个候补广告平台或者自主广告,把他们的投放量设为0%。这样,如果AdMob有合适的广告,那么一 定只显示AdMob的广告;如果没有,那就会根据优先级向投放量为0%的广告平台发出请求。这样空广告位会减少,填充率会提升。

4. 用模拟器测试返回的广告列表总是空值,为什么?

当您使用模拟器进行调试时请设置好语言环境(国家地区),因为当您在网站中获取位置打开,并且开启地域优化功能后,获得的地理位置很可能和您设置的广告平台不一致,导致程序中得不到广告。例如您的模拟器地区为美国,但是在网站中您只打开了中国广告则会出现上述问题。

5. 为什么AdMob总是获取不到广告?

国外的广告平台比如AdMob在国内广告展示填充率不太稳定,属于正常现象。这是因为在中国地区投放的广告极少,欧美用户用起来应该就不会这么低的 显示率了,可以先设置成测试模式,检查广告显示是否正常,App正式上线前把测试模式改成正式模式即可。同时你你可以尝试设个自主广告避免浪费。

6. 为什么需要添加权限设置,不添加会怎么样?

权限的设置主要有两个方面,一个是芒果为了实现广告优化而添加的例如定位,用户私有信息的权限;再有就是其他广告平台要求的权限设置。芒果可以保证去掉权限之后芒果SDK可以正常运行,只是一些功能不能实现,但是不能保证其他的广告平台SDK仍然能正常运行。

所有芒果要求添加的权限中,以下两个权限是必须添加的,如果不添加会不能显示广告
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE

如果不添加以下权限,将不能使用芒果提供的地域优化功能

android.permission.READ_PHONE_STATE”
android.permission.ACCESS_FINE_LOCATION”
android.permission.ACCESS_COARSE_LOCATION

其他权限请参考您使用的广告平台的SDK使用说明文档,如果缺少广告平台要求添加的权限,可能会导致该平台广告不能正常显示。

7. 因单一平台SDK有互相冲突现象,所以demo中的jar文件不全,详细请查看AdsMogo_Android_SDK_1.2.6文件夹中的libs.zip包。

* AppMedia和好耶的jar包冲突不能一起使用。


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!