先简单的描述一下在广告方面遇到的问题. 开发一款App有了一定的用户量之后通常会想接入第三方广告来实现变现, 然而在很多市场不让这类带广告的App上架,除非接的是他们家的广告.
在这里我只能呵呵了.这点困难就想难倒我们.
那接下来ShowTime.怎么做呢? 没错,就是插件化. 以广点通广告为例 这里我使用的是360开源的RePlugin,具体介绍和使用方法请看官方文档.
想学习Android或者在学习Android的过程中遇到了问题可以来我的Android学习群:110359956,私聊我就行了,不管你是小白还是大牛,只要我知道,问题都帮你解决,不定期分享干货,包括我自己整理的一份2017最新的Android资料和零基础入门视频教程
一.RePlugin插件接入指南 第 1 步:添加 RePlugin Plugin Gradle 依赖 在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-plugin-gradle 依赖:
buildscript { dependencies { classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.0'
第 2 步:添加 RePlugin Plugin Library 依赖 在 app/build.gradle 中应用 replugin-plugin-gradle 插件,并添加 replugin-plugin-lib 依赖:
apply plugin: 'replugin-plugin-gradle'dependencies { compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.0'
接下来您就可以像正常接入广告那样,开发插件。生成出来的是APK,既可以“安装到设备”,又可以“作为插件”使用。
二.RePlugin主程序接入指南 第 1 步:添加 RePlugin Host Gradle 依赖 在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-host-gradle 依赖:
buildscript { dependencies { classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.0'
第 2 步:添加 RePlugin Host Library 依赖 在 app/build.gradle 中应用 replugin-host-gradle 插件,并添加 replugin-host-lib 依赖:
apply plugin: 'replugin-host-gradle'repluginHostConfig {
第 3 步:配置 Application 类
public class App extends Application{ @Override
三.宿主App调用插件广告 1.编译插件广告,将生成的xx.apk包重命名xx.jar 将 xx.jar放到宿主App的 assets/plugins 目录下 , Replugin将会自动获取该内置插件
2.处理广点通开屏广告 由于广点通开屏广告的展示点击都由SDK封装处理了. 我们这里采用的方式是,由宿主跳转到插件的闪屏页,在插件中完成请求,展示,点击结束后回到宿主的主页面. (1)宿主跳转到插件Activity
try {
(2)插件开屏广告请求处理,就按正常的广告逻辑走
(3)插件回到宿主的主页面
private void intoMainPage() { //TODO 打开宿主应用
(4)宿主的清单文件中添加必要配置,否则广告无反应
<!-- 广点通广告 -->
注意 : 尽量使宿主和插件的包名一致,已避免广告无收益
3.处理广点通原生广告 广点通原生广告不同于开屏广告,其展示曝光和点击曝光都由自己处理. 我们只能通过反射的方案去请求广告
(1)在插件中先对广告请求做一层封装
package com.plugin.ad.managers;import android.app.Activity;import android.content.Context;import android.view.View;import android.view.ViewGroup;import com.plugin.ad.listeners.ILoadListener;import com.plugin.ad.models.ADModel;import com.plugin.ad.models.ModelManager;import com.plugin.ad.utils.JsonUtil;/**
/**
(2)宿主中反射LoadManager的requestNativeAD()方法 a.拿到插件的ClassLoader
ClassLoader classLoader = RePlugin.fetchClassLoader("adPlugin");
b.取得需要反射的类
Class<?> methodClass = classLoader.loadClass("com.plugin.ad.managers.LoadManager");
c.由于请求广告的requestNativeAD()方法中有一个参数是接口. (这里得使用动态代理) 取得被代理接口
/**
d.接下来就是反射请求接口了
/**
注意传入的Context必须是插件的Context e.在动态代理中取得回调
public class LoadCallBackProx implements InvocationHandler { /**
这里我使用了EventBus将回调的广告传到请求的界面中
/*** 原生信息流* 插件广告请求** @param event*/@Subscribepublic void onEventReADEvent(ReNativeAdEvent event) { if (event.isSucc) { //成功try {Object object = ReAdFactory.getNativeAD(POI_SECOND); //展示String title = (String) object.getClass().getMethod("getTitle").invoke(object);String iconUrl = (String) object.getClass().getMethod("getIconUrl").invoke(object); //反射调用曝光接口object.getClass().getMethod("onExposured", new Class[]{View.class}).invoke(object, findViewById(R.id.activity_main));} catch (Exception e) {e.printStackTrace();}} else { //失败}}
点击曝光的反射
/**
撸完,收工,学习交流群110359956