note-40 关于发布应用

由于有米SDK 更新到 3.08 , 很多网上原有的教程已经不适用.ID和密码直接嵌入程序中, 不再在Manifest中注册, 用法上有很大的改变, 但同时也方便了很多.

 

 还是官方的更新靠谱:

http://wiki.youmi.net/Youmi_Android_Banner_Version_3.08

 

SDK嵌入步骤
准备工作
步骤一.将 youmi-android.jar 导入您的工程中。
右键您的工程根目录,选择“New”,再选择“Folder”,输入Folder name为"libs"
将 youmi-android.jar 拷贝到工程根目录的libs文件夹下
右键 youmi-android.jar ,选择“Build Path”再选择“Add to Build Path”
导入成功
步骤二.在manifest.xml文件中配置用户权限

请务必配置以下权限,否则将有可能获取不到广告。
android.permission.INTERNET,连接网络权限 INTERNET ,用于请求广告
android.permission.READ_PHONE_STATE,用于精确统计用户手机的系统信息
android.ACCESS_NETWORK_STATE,用于精确识别网络接入点等信息
android.permission.ACCESS_COARSE_LOCATION,有助于精准投放地域广告以及帮助统计使用应用程序的用户的地区分布情况
android.permission.WRITE_EXTERNAL_STORAGE,有助于实现图片资源的缓存,节省流量,并可获得更好的用户体验
com.android.launcher.permission.INSTALL_SHORTCUT,用于支持一些新的广告形式

请将下面权限配置代码复制到 AndroidManifest.xml 文件中 :
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"></uses-permission>
步骤三.在AndroidManifest.xml中添加AdActivity和YoumiReceiver

AdActivity是广告详情展示的载体,请在AndroidManifest.xml中添加AdActivity:
<activity android:name="net.youmi.android.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation"/>

YoumiReceiver是广告效果的接收器,请在AndroidManifest.xml中添加YoumiReceiver:
<receiver android:name="net.youmi.android.YoumiReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
步骤四.初始化账号信息

在主Activity的onCreate中调用AdManager.init() 初始化 App ID 、App Secret、请求广告间隔和测试模式等参数(请务必在任意AdView初始化前调用一次)。
//第一个参数为您的应用发布Id
//第二个参数为您的应用密码
//第三个参数是请求广告的间隔,有效的设置值为30至200,单位为秒
//第四个参数是设置测试模式,设置为true时,可以获取测试广告,正式发布请设置此参数为false
AdManager.init(Context context,String appid, String appsec, int intervalSecond, boolean isTestMode);
!注意:3.04版本开始AdManager.init方法的参数改为五个,加上了Context参数
!请将测试模式设置为false后上传至网站等待审核。
!未上传应用安装包、未通过审核的应用、模拟器运行,都只能获得测试广告,审核通过后,模拟器上依旧是测试广告,真机才会获取到正常的广告。
步骤五.修改proguard.cfg

添加以下代码到proguard.cfg文件中
-keep class net.youmi.android.** {
*;
}
步骤六.设置发布渠道号【可选】

有米广告条 3.02版以后的sdk加入了分发渠道号设置,以后可以统计来自各个分发渠道的数据。
该设置为可选,当没有设置发布渠道号时,将采用默认渠道号0。
设置方法如下: 把以下代码复制到AndroidManifest.xml 文件中:
<meta-data android:name="YOUMI_CHANNEL" android:value="渠道编号"></meta-data>

注意:请在AndroidManifest.xml配置中加入meta-data参数,其中key为"YOUMI_CHANNEL" ,value为int型的渠道编号,请为每个不同渠道号打一个独立的包。详细的渠道编号请参见: http://wiki.youmi.net/wiki/PromotionChannelIDs


常用布局方式
使用xml布局嵌入广告
步骤一.在布局xml中设置广告条容器

以下为一个实例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg"
android:orientation="vertical" >
<!--adViewLayout为广告条容器-->
<LinearLayout
android:id="@+id/adViewLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</LinearLayout>
</LinearLayout>
步骤二.XML布局代码部分
public class XmlSample extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 应用Id 应用密码 广告请求间隔(s) 设置测试模式[false为发布模式]
AdManager.init(this,"XXXXXXXXXXXX", "XXXXXXXXXXXX", 30, false);
LinearLayout adViewLayout = (LinearLayout) findViewById(R.id.adViewLayout);
adViewLayout.addView(new AdView(this),
new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
}
}
使用代码布局嵌入广告

以下是一个示例
public class CodeSample extends Activity{




/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

// 应用Id 应用密码 广告请求间隔(s) 设置测试模式[false为发布模式]
AdManager.init(this,"XXXXXXXXXXXX", "XXXXXXXXXXXX", 30, false);

LinearLayout layout=new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setBackgroundResource(R.drawable.bg);


//初始化广告视图,可以使用其他的构造函数设置广告视图的背景色、透明度及字体颜色
AdView adView = new AdView(this);
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
layout.addView(adView, params);



setContentView(layout);
}

}
使用悬浮布局嵌入广告

以下是一个示例
public class SuspensoidSample extends Activity{


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 应用Id 应用密码 广告请求间隔(s) 设置测试模式[false为发布模式]
AdManager.init(this,"XXXXXXXXXXXX", "XXXXXXXXXXXX", 30, false);

setContentView(R.layout.main);


//初始化广告视图
AdView adView = new AdView(this);

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);

//设置广告出现的位置(悬浮于屏幕右下角)
params.gravity=Gravity.BOTTOM|Gravity.RIGHT;

//将广告视图加入Activity中
addContentView(adView, params);

}
}
常见问题
版本更新内容
3.0版
全新的广告条界面。
重新定义广告条尺寸,详情请查看文档。
支持应用程序版本更新功能。
重新定义AdListener接口为AdViewListener,同时重命名其方法onReceiveAd为onAdViewSwitchedAd。并且修改了AdView的setAdListener(AdListener adListener)方法为setAdViewListener(AdViewListener listener)。详情请查看API文档。
为AdView类新增了一个方法:refreshAd()。调用该方法尝试刷新AdView展示的广告。在某些情况下,如想在一个停留时间极短的界面上快速地显示广告条,可以调用该方法尝试刷新广告,这样可以最大可能地避免出现这样的情况:一个只停留十几秒的界面由于广告没有及时出来而错过了展示广告的机会。详情请查看API文档
修改了AdManager类的init方法,取消了旧版本的appVersion参数,现在init方法只有4个参数。详情请查看API文档。
为AdManager新增了一个方法:disableUpdateApp。调用该方法可以取消使用应用程序版本更新功能。除非有特别需要,否则请不要调用此接口。详情请查看API文档
为AdManager新增了一个方法:setDonotClearWebViewCache。调用该方法设置SDK不删除所使用的WebView的缓存。除非有特别需要,否则请不要调用此接口。详情请查看API文档
修复了SDK内置网页浏览页在cmwap环境下出现乱码的一个bug。
该版本SDK兼容系统版本1.6及以上,对于1.5版本的系统可能有一定的兼容性问题。
3.01版
修复了3.0版导致混淆出错的bug。
修复了未成功请求广告时广告条占据广告位的bug。
轻量化了AdView的初始化流程,加快运行速度。
3.02版
加入了分发渠道号设置,以后可以通过后台统计来自各个分发渠道的数据。
修复了对android 1.5系统的兼容性问题。
3.03版
修复了文字广告有时候出现显示样式混乱的一个bug。
优化了请求广告线程的操作,减少资源消耗。
3.04版
在广告条的宽度设置为FILL_PARENT的情况下可自适应容器控件的宽度。
3.05版
优化了广告展示模式
3.07版
修复了初始化广告条设置setVisibility函数引起的bug
3.08版
修复了广告条被移除再添加显示不刷新的bug
新增弹出框展示广告的新特新
优化下载功能,提供断点续传下载
广告条的尺寸定义

新版本的SDK对广告条尺寸进行了调整:
使用LayoutParams进行广告条尺寸的设置
广告条的宽度必须设置为LayoutParams.FILL_PARENT或LayoutParams.WRAP_CONTENT,规则如下:
当宽度设置为LayoutParams.FILL_PARENT时,广告条的宽度为屏幕当前状态的宽度。如320*480的屏幕,当竖屏时,广告条宽度为320px;当横屏时,广告条宽度为480px。在v3.04以后,设置为该值时,广告条宽度与容器控件宽度一致
当宽度设置为LayoutParams.WRAP_CONTENT时,广告条的宽度为屏幕宽高中较小一边的值。如320*480的屏幕,无论屏幕的方向如何,广告条的宽度都为320px。

广告条的高度必须设置为LayoutParams.WRAP_CONTENT,并且广告条的高度会自动调整为50dp。
换算为px,则:
对于Low density (120), ldpi:
广告条的高度为38px;
对于Medium density (160), mdpi:
广告条的高度为50px;
对于High density (240), hdpi:
广告条的高度为75px;
对于Extra high density (320), xhdpi:
广告条的高度为100px;
有米广告Android SDK使用哪种字符编码

有米广告Android SDK使用UTF-8字符编码,在嵌入广告的时候请使用UTF-8编程环境,否则会出现乱码情况。
有米广告Android SDk兼容Android系统SDK的哪些版本

有米广告Android SDK兼容Android 系统 1.6及以上版本SDK,对于1.5及以下版本可能会有兼容性问题。
关于AdViewListener接口

当指定的AdView切换展示广告后或者请求广告失败后,该接口会通知监听者。 该接口的设计是为了方便那些有需要在广告条展示广告后进行一些界面处理的开发者,但它不适用于统计展示数, 因为在一个应用程序的生命周期中可能存在多个AdView实例,因此在运行的过程中,使用该接口统计到的切换展示广告的次数将会比广告的真正展示数多, 如果依据该接口来统计展示数,结果将会与真实展示数相差很大。查询详细的展示数据请登录有米平台: http://www.youmi.net

ps: 旧版本该接口的原型是AdListener,该接口的方法onReceiveAd实际上就是针对每个AdView实例切换广告的时候通知监听者, 作用与新接口一样,但其命名不准确,导致了一些不必要的误会,现更正其命名为 void onAdViewSwitchedAd(AdView adView) 。
关于广告没有成功展示的问题排查

如果出现广告没有展示的情况,请按下面的步骤检查:
检查广告配置是否正确,请务必仔细阅读并且按照"SDK嵌入步骤"中的"准备工作"一节中的步骤来完成广告的参数配置。如果该参数配置正确仍然无法显示广告,请按下一步检查。
使用Eclpse开发的朋友可以通过查看DDMS的logcat输出,有米广告的Tag是YoumiSdk。如果log信息中有输出Request Error Code,请将错误码发给有米客服。
关于混淆APK出错的问题

如果使用xml布局并且使用proguard混淆apk,请在proguard.cfg中加入以下代码:
-keep class net.youmi.android.** {
*;
}
更多常见问题
请查看 http://wiki.youmi.net
附录:API文档
net.youmi.android.AdManager
Class Overview

有米广告参数配置管理类,用于初始化请求广告的相关设置
Summary

Public Methods static void init(Context context,String appid, String appsec, int intervalSecond, boolean isTestMode) 初始化广告配置
static void setDonotClearWebViewCache() SDK在展示广告的过程中使用了WebView,如果您希望保留WebView的缓存,可以调用此接口设置SDK不删除WebView缓存。如无特别需要,请不要调用此接口。
static void disableUpdateApp() 新版SDK加入了应用版本检查更新功能,如果您不希望使用应用程序检查更新功能时,可以调用此接口关闭自动检查更新功能。如无特别需要,请不要调用此接口。

Public Methods
public static void init(Context context,String appid, String appsec, int intervalSecond, boolean isTestMode)

初始化广告参数,必须在任意AdView实例化前调用。建议仅且在应用启动的时候在主Activity的onCreate中调用该方法初始化一次。
参数:
context
appid - 应用Id
appsec - 应用密码
intervalSecond - 设置广告最小切换时间,单位为秒
isTestMode - 设置是否测试模式,如果设置为true,可以在真机上展示测试广告。在正式发布的版本中应该置为false
public static void setDonotClearWebViewCache()

SDK中有使用到WebView,为了避免应用程序中的缓存数据的积累造成大量的存储空间消耗,SDK会自动清除使用到的WebViewCache缓存。如果您的应用程序中有使用WebView,并且不希望清除缓存,可以调用此接口设置不清除缓存。否则,请不要调用此接口。
public static void disableUpdateApp()

有米广告Android 3.0版SDK加入了应用程序自动检查更新功能,这样可以很方便您的应用升级。以后当您升级应用程序的时候,只需要将应用程序的最新版本上传到我们的服务器,审核通过以后,您的旧版应用程序在启动的时候就会自动检查更新,在得到用户的授权后,应用程序会下载最新版本安装,这样老用户可以更快地使用最新版本的软件。 SDK默认开启应用程序检查更新功能 如果您不希望使用该功能,可以调用此接口停用该功能。
net.youmi.android.AdView
Class Overview

AdView是展示广告的载体
Summary

Public Constructors AdView(Activity activity) AdView构造函数,使用默认样式。
AdView(Context context, AttributeSet attrs) AdView构造函数,用于xml布局
AdView(Context context, AttributeSet attrs, int defStyle) AdView构造函数,用于xml布局
AdView(Activity activity, int backgroundColor, int textColor, int backgroundTransparent) AdView的构造函数



Public Methods int getAdWidth() 获取广告条宽度
int getAdHeight() 获取广告条高度
void refreshAd() 尝试刷新广告
void setAdViewListener(AdViewListener listener) 设置广告条监听接口

Public Constructors
public AdView(Activity activity)

AdView构造函数,使用默认样式
public AdView(Context context, AttributeSet attrs)

AdView构造函数,用于xml布局
public AdView(Context context, AttributeSet attrs, int defStyle)

AdView构造函数,用于xml布局
public AdView(Activity activity, int backgroundColor, int textColor, int backgroundTransparent)

AdView的构造函数
参数
activity - Activity
backgroundColor - 文字广告的背景颜色
textColor - 文字广告的字体颜色
backgroundTransparent - 文字广告的背景透明度,范围是0到255
Public Methods
public int getAdWidth()

获取广告条宽度
public int getAdHeight()

获取广告条的高度
public void refreshAd()

在某些情况下,如停留时间较短的页面上放置广告条,希望使广告条尽快地展示广告,可以调用此接口尝试刷新展示广告。
public void setAdViewListener(AdViewListener listener)

设置广告条监听接口
net.youmi.android.AdViewListener
Class Overview

AdView监听接口,监听一个指定的AdView的切换广告的状态。
Summary

Public Methods void onAdViewSwitchedAd(AdView adView) 当指定的AdView实例切换所展示的广告时,会调用此接口通知监听者
void onConnectFailed(AdView adView) 当指定的AdView实例请求广告失败时,如遇到手机网络断开等情况,会调用此接口通知监听者

Public Methods
public void onAdViewSwitchedAd(AdView adView)

当指定的AdView实例切换所展示的广告时,会通知此接口监听者。
该接口的设计是为了方便那些有需要在广告条展示广告后进行一些界面处理的开发者,但它不适用于统计展示数,因为在一个应用程序的生命周期中可能存在多个AdView实例,因此在运行的过程中,使用该接口统计到的切换展示广告的次数将会比广告的真正展示数多,如果依据该接口来统计展示数,结果将会与真实展示数相差很大。详细的展示数据请登录有米平台: http://www.youmi.net 查询。

ps: 旧版本该接口的原型是AdListener,该接口的方法onReceiveAd实际上就是针对每个AdView实例切换广告的时候通知监听者, 作用与新接口一样,但其命名不准确,导致了一些不必要的误会,现更正其命名为 void onAdViewSwitchedAd(AdView adView) 。
public void onConnectFailed(AdView adView)

当指定的AdView实例请求广告失败时,如遇到手机网络断开等情况,会调用此接口通知监听者
net.youmi.android.AdActivity
Class Overview

AdActivity是展示广告详情的载体,请在AndroidManifest.xml中添加AdActivity:
<activity android:name="net.youmi.android.spotad.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation"/>
net.youmi.android.YoumiReceiver
Class Overview

YoumiReceiver是广告效果的接收器,请在AndroidManifest.xml中添加YoumiReceiver:
<receiver android:name="net.youmi.android.YoumiReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>

 

 

 

 

 

 

 

 

另外, 如果要用ProGuard来加密的话, 不知是不是新版本的 android sdk 问题, 创建项目时没有传说中的 proguard.cfg 文件,而要自己手写!?

 

网上还是有好心的高人:

http://www.cnblogs.com/yyangblog/archive/2011/01/07/1929706.html

http://android.tgbus.com/Android/tutorial/201107/358743.shtml

 

 

完整的 proguard.cfg文件:

 

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
native <methods>;
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

 

 

 

 

 

 

 

 

一些实际开发的技巧:

 

1. 启动界面:

http://blog.sina.com.cn/s/blog_4d142b550100rs3f.html

 

 

 

2. 自适应屏幕密度:(写在 application 外, manifest 内)

 

 <supports-screens android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" />

 

 

3. 强制屏幕不旋转, 输入法适应EditText位置:

<activity android:name=".subactivity.StrategyActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">

</activity>

 

 

 

4. 常用 permission(有米官方建议的 permissions):

 

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值