Unity 接入HeyZap原生广告方法

  因工作需要,需要接入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对象,调用它的方法就可以了。

kisence

潮落江平未有风。