因工作需要,需要接入HeyZap原生广告,HeyZap提供的Unity插件并未提供这一功能,所以我把我接入插件的步骤纪录在此。
这里是官方给出的接入文档
Unity和Android交互的教程可以参考这篇
接入原生HeyZap插件需要Unity调用Android代码,并且在Android项目中需要为原生广告创建一个Activity
Step.1 建立Android项目
打开AndroidStudio 包名要与我们Unity项目一致
导入unity的 classes.jar 和 heyzap 的SDK heyzap-ads-sdk.jar库
Step.2 建立广告Activity
New -> EmptyActivity ,起名为NativeADActivity
Step.3 设置Activity布局
编辑NativeADActivity的布局文件,增加
nativeadcontainer(RelativeLayout)、
body(TextView)、
icon_image(ImageView)、
button1(Button), 四个节点
Step.4 编写JAVA代码
这里按照官方文档的例子写就可以了
这里附DownloadImageTask的实现
public class DownloadImageTask extends AsyncTask {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
Step.5 导出Jar包
修改build.gradle文件,改成这样
apply plugin: 'com.android.library'
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
minSdkVersion 14
targetSdkVersion 25
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:design:25.0.0'
testCompile 'junit:junit:4.12'
compile files('libs/classes.jar')
compile files('libs/heyzap-ads-sdk-9.12.2.jar')
}
task deleteOldJar(type: Delete) {
delete 'build/outputs/heyzapSDK.jar'
}
task exportJar(type: Copy) {
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'heyzapSDK.jar')
}
exportJar.dependsOn(deleteOldJar, build)
打开Gradle视图,依次展开 app->other,找到exportJar,双击等待Jar导出,第一次运行会比较慢。
Step.6 Unity集成
在Unity 的 AndroidManisest.xml 文件里面,将两个Activity ( MainActivity、NativeADActivity ) 添加进来
将生成好的 heyzapSDK.jar (在项目的app/build/libs目录下)放到Plugins/Android/bin目录下
将 Android项目下的app/src/res 文件夹拷贝到Plugins/Android/res目录下
以上两个目录如果不存在创建即可
在Unity调用Android代码可以参考教程
大功告成
导出你的Unity项目,测试你的广告吧!
Tips
当我们接入的插件占用了android.intent.action.MAIN
这个属性的时候,该怎么办呢?我这里的方案是放弃使用UnityPlayerActivity
这个类,而是直接调用我自己自定义的类,
在自定义的类中添加代码
public static HeyZapHelper instance;
public static void CreateInstance()
{
if(instance == null)
{
instance = new HeyZapHelper();
Intent intent = new Intent(UnityPlayer.currentActivity.getApplicationContext(),HeyZapHelper.class);
instance.startActivity(intent);
}
}
然后从Unity中先调用CreateInstance()
方法,再获取instance对象,调用它的方法就可以了。