您的位置:首页 > 其它

(新手植入有米广告教程)根据官方例子给简单的应用加入有米广告

2017-05-25 17:20 281 查看
第一步,到有米官网中申请一个开发者账户并新建一个应用,之后获取应用的应用秘钥和发布ID。如下图:



第二步,下载有米广告SDD,并解压该SDK,把其中libs文件夹中以.arr结尾的文件复制到AS的新工程libs文件夹中,然后编译一下。如下图:选中arr包,然后并点击工具栏红圈中的东东,这样arr包就和工程绑定了。



第二点二步:配置应用的build.gradle文件,记住是应用的,不是工程build.gradle文件。具体如下图红圈所示:加入文件所没有的代码即可,后编译一下。



第三步:配置AndroidMainfest.xml文件

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.weihuan.youmiguanggaotest">

    <uses-permission android:name="android.permission.INTERNET" />

    <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_WIFI_STATE" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

    <!-- 以下为可选权限 -->

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:supportsRtl="true"

        android:theme="@style/AppTheme">

        <activity android:name=".BaseActivity"></activity>

        <activity

            android:name=".SplashActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"

            android:label="@string/app_name"

            android:screenOrientation="portrait" >

            <intent-filter >

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter >

        </activity >

        <activity android:name=".MainActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">

        </activity>

        <activity

            android:name=".SpotAdActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"

            android:label="@string/app_name" >

        </activity >

        <activity

            android:name=".SlideableSpotAdActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"

            android:label="@string/app_name" >

        </activity >

        <activity

            android:name=".NativeSpotAdActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"

            android:label="@string/app_name" >

        </activity >

        <activity

            android:name=".VideoAdActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"

            android:label="@string/app_name"

            android:resizeableActivity="false"

            android:screenOrientation="portrait" >

        </activity >

        <activity

            android:name=".NativeVideoAdActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"

            android:label="@string/app_name" >

        </activity >

        <!-- 视频组件 -->

        <activity

            android:name="net.youmi.android.nm.vdo.VideoActivity"

            android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"

            android:resizeableActivity="false"

            android:screenOrientation="landscape"

            android:taskAffinity=""

            android:theme="@android:style/Theme.NoTitleBar" >

        </activity >

         有米SDK为了兼容Android N应用间共享文件行为变更而需要配置的FileProvider

        <provider

            android:name="android.support.v4.content.FileProvider"

            android:authorities="com.youmi.android.addemo.fileProvider"

            android:exported="false"

            android:grantUriPermissions="true" >

            <meta-data

                android:name="android.support.FILE_PROVIDER_PATHS"

                android:resource="@xml/file_provider" />

        </provider >

        <!-- 有米渠道号(可选配置) 渠道号不能带空格,类型为整数 -->

        <meta-data

            android:name="YOUMI_CHANNEL"

            android:value="0" >

        </meta-data >

    </application>

</manifest>

第四步,新建三个Activity和所属的XMl布局文件,为:SplashActivity、MainActivity、BaseActivity具体代码如下:

1、BaseActivity的XML布局(其实没用到这布局)和类中代码:



public class BaseActivity extends AppCompatActivity {

    protected static final String TAG = "youmi-demo";

    protected Context mContext;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mContext = this;

        setContentView(R.layout.activity_base);

    }

    /**

     * 打印调试级别日志

     *

     * @param format

     * @param args

     */

    protected void logDebug(String format, Object... args) {

        logMessage(Log.DEBUG, format, args);

    }

    /**

     * 打印信息级别日志

     *

     * @param format

     * @param args

     */

    protected void logInfo(String format, Object... args) {

        logMessage(Log.INFO, format, args);

    }

    /**

     * 打印错误级别日志

     *

     * @param format

     * @param args

     */

    protected void logError(String format, Object... args) {

        logMessage(Log.ERROR, format, args);

    }

    /**

     * 展示短时Toast

     *

     * @param format

     * @param args

     */

    protected void showShortToast(String format, Object... args) {

        showToast(Toast.LENGTH_SHORT, format, args);

    }

    /**

     * 展示长时Toast

     *

     * @param format

     * @param args

     */

    protected void showLongToast(String format, Object... args) {

        showToast(Toast.LENGTH_LONG, format, args);

    }

    /**

     * 打印日志

     *

     * @param level

     * @param format

     * @param args

     */

    private void logMessage(int level, String format, Object... args) {

        String formattedString = String.format(format, args);

        switch (level) {

            case Log.DEBUG:

                Log.d(TAG, formattedString);

                break;

            case Log.INFO:

                Log.i(TAG, formattedString);

                break;

            case Log.ERROR:

                Log.e(TAG, formattedString);

                break;

        }

    }

    /**

     * 展示Toast

     *

     * @param duration

     * @param format

     * @param args

     */

    private void showToast(int duration, String format, Object... args) {

        Toast.makeText(mContext, String.format(format, args), duration).show();

    }

}

2、SplashActivity的XML布局文件和类中代码:



public class SplashActivity extends BaseActivity {

    private PermissionHelper mPermissionHelper;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        super.onCreate(savedInstanceState);

        mContext = this;

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        // 移除标题栏

        setContentView(R.layout.activity_splash);

        runApp();//直接就运行了

        // 当系统为6.0以上时,需要申请权限

    }

    @Override

    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        mPermissionHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        mPermissionHelper.onActivityResult(requestCode, resultCode, data);

    }

    /**

     * 跑应用的逻辑

     */

    private void runApp() {

        //初始化SDK

        AdManager.getInstance(mContext).init("85aa56a59eac8b3d", "a14006f66f58d5d7", true);

        //设置开屏

        setupSplashAd();

    }

    /**

     * 设置开屏广告

     */

    private void setupSplashAd() {

        // 创建开屏容器

        final RelativeLayout splashLayout = (RelativeLayout) findViewById(R.id.rl_splash);

        RelativeLayout.LayoutParams params =

                new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        params.addRule(RelativeLayout.ABOVE, R.id.view_divider);

        // 对开屏进行设置

        SplashViewSettings splashViewSettings = new SplashViewSettings();

        // // 设置是否展示失败自动跳转,默认自动跳转

        // splashViewSettings.setAutoJumpToTargetWhenShowFailed(false);

        // 设置跳转的窗口类

        splashViewSettings.setTargetClass(MainActivity.class);

        // 设置开屏的容器

        splashViewSettings.setSplashViewContainer(splashLayout);

        // 展示开屏广告

        SpotManager.getInstance(mContext)

                .showSplash(mContext, splashViewSettings, new SpotListener() {

                    @Override

                    public void onShowSuccess() {

                        logInfo("开屏展示成功");

                    }

                    @Override

                    public void onShowFailed(int errorCode) {

                        logError("开屏展示失败");

                        switch (errorCode) {

                            case ErrorCode.NON_NETWORK:

                                logError("网络异常");

                                break;

                            case ErrorCode.NON_AD:

                                logError("暂无开屏广告");

                                break;

                            case ErrorCode.RESOURCE_NOT_READY:

                                logError("开屏资源还没准备好");

                                break;

                            case ErrorCode.SHOW_INTERVAL_LIMITED:

                                logError("开屏展示间隔限制");

                                break;

                            case ErrorCode.WIDGET_NOT_IN_VISIBILITY_STATE:

                                logError("开屏控件处在不可见状态");

                                break;

                            default:

                                logError("errorCode: %d", errorCode);

                                break;

                        }

                    }

                    @Override

                    public void onSpotClosed() {

                        logDebug("开屏被关闭");

                    }

                    @Override

                    public void onSpotClicked(boolean isWebPage) {

                        logDebug("开屏被点击");

                        logInfo("是否是网页广告?%s", isWebPage ? "是" : "不是");

                    }

                });

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        // 开屏展示界面的 onDestroy() 回调方法中调用

        SpotManager.getInstance(mContext).onDestroy();

    }

}

3、MainActivity的XML布局和代码:

XML布局

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="@drawable/bg_activity"

    >

    <RelativeLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        >

        <TextView

            android:id="@+id/tv_main_top_tag"

            style="@style/style_text"

            android:layout_centerHorizontal="true"

            android:layout_marginTop="30dp"

            android:text="@string/tv_main_top_tag"

            android:textSize="24sp"

            />

        <TextView

            android:id="@+id/tv_main_version_info"

            style="@style/style_text"

            android:layout_below="@id/tv_main_top_tag"

            android:layout_centerHorizontal="true"

            android:layout_marginTop="12dp"

            android:text="@string/tv_main_version_info"

            android:textSize="18sp"

            />

        <Button

            android:id="@+id/btn_main_show_spot_ad"

            style="@style/style_button"

            android:layout_below="@id/tv_main_version_info"

            android:layout_marginTop="40dp"

            android:text="@string/btn_main_show_spot_ad"

            />

        <Button

            android:id="@+id/btn_main_show_slideable_spot_ad"

            style="@style/style_button"

            android:layout_below="@id/btn_main_show_spot_ad"

            android:layout_marginTop="12dp"

            android:text="@string/btn_main_show_slideable_spot_ad"

            />

        <Button

            android:id="@+id/btn_main_show_native_spot_ad"

            style="@style/style_button"

            android:layout_below="@id/btn_main_show_slideable_spot_ad"

            android:layout_marginTop="12dp"

            android:text="@string/btn_main_show_native_spot_ad"

            />

        <Button

            android:id="@+id/btn_main_show_video_ad"

            style="@style/style_button"

            android:layout_below="@id/btn_main_show_native_spot_ad"

            android:layout_marginTop="12dp"

            android:text="@string/btn_main_show_video_ad"

            />

        <Button

            android:id="@+id/btn_main_show_native_video_ad"

            style="@style/style_button"

            android:layout_below="@id/btn_main_show_video_ad"

            android:layout_marginTop="12dp"

            android:text="@string/btn_main_show_native_video_ad"

            />

        <Button

            android:id="@+id/btn_main_check_ad_settings"

            style="@style/style_button"

            android:layout_below="@id/btn_main_show_native_video_ad"

            android:layout_marginTop="12dp"

            android:text="@string/btn_main_check_ad_settings"

            />

        <LinearLayout

            android:id="@+id/ll_main_banner"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignParentBottom="true"

            android:layout_centerHorizontal="true"

            android:orientation="horizontal"

            >

        </LinearLayout >

        <TextView

            style="@style/style_text"

            android:layout_below="@id/btn_main_check_ad_settings"

            android:layout_centerHorizontal="true"

            android:layout_marginBottom="12dp"

            android:layout_marginTop="24dp"

            android:text="@string/tv_main_bottom_tag"

            android:textSize="16sp"

            />

    </RelativeLayout >

</ScrollView >

MainActivity 代码

public class MainActivity extends BaseActivity implements View.OnClickListener {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        // 设置应用版本信息

        setupAppVersionInfo();

        // 初始化视图

        initView();

        // 预加载数据

        preloadData();

        // 检查广告配置

        checkAdSettings();

        //设置广告条

        setupBannerAd();

    }

    /**

     * 设置应用版本信息

     */

    private void setupAppVersionInfo() {

        TextView textVersionInfo = (TextView) findViewById(R.id.tv_main_version_info);

        if (textVersionInfo != null) {

            textVersionInfo.append(getAppVersionName());

        }

    }

    /**

     * 初始化视图

     */

    private void initView() {

        findViewById(R.id.btn_main_show_spot_ad).setOnClickListener(this);

        findViewById(R.id.btn_main_show_slideable_spot_ad).setOnClickListener(this);

        findViewById(R.id.btn_main_show_native_spot_ad).setOnClickListener(this);

        findViewById(R.id.btn_main_show_video_ad).setOnClickListener(this);

        findViewById(R.id.btn_main_show_native_video_ad).setOnClickListener(this);

    }

    /**

     * 预加载数据

     */

    private void preloadData() {

        // 设置服务器回调 userId,一定要在请求广告之前设置,否则无效

        VideoAdManager.getInstance(mContext).setUserId("userId");

        // 请求视频广告

        VideoAdManager.getInstance(mContext).requestVideoAd(mContext);

    }

    /**

     * 检查广告配置

     */

    private void checkAdSettings() {

        Button btnCheckAdSettings = (Button) findViewById(R.id.btn_main_check_ad_settings);

        btnCheckAdSettings.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                boolean result = VideoAdManager.getInstance(mContext).checkVideoAdConfig();

                showShortToast("配置 %s", result ? "正确" : "不正确,请对照文档检查是否存在遗漏");

            }

        });

    }

    /**

     * 设置广告条广告

     */

    private void setupBannerAd() {

        /**

         * 悬浮布局

         */

        // 实例化LayoutParams

        FrameLayout.LayoutParams layoutParams =

                new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        // 设置广告条的悬浮位置,这里示例为右下角

        layoutParams.gravity = Gravity.BOTTOM | Gravity.RIGHT;

        // 获取广告条

        final View bannerView = BannerManager.getInstance(mContext)

                .getBannerView(mContext, new BannerViewListener() {

                    @Override

                    public void onRequestSuccess() {

                        logInfo("请求广告条成功");

                    }

                    @Override

                    public void onSwitchBanner() {

                        logDebug("广告条切换");

                    }

                    @Override

                    public void onRequestFailed() {

                        logError("请求广告条失败");

                    }

                });

        // 添加广告条到窗口中

        ((Activity) mContext).addContentView(bannerView, layoutParams);

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        // 展示广告条窗口的 onDestroy() 回调方法中调用

        BannerManager.getInstance(mContext).onDestroy();

        // 退出应用时调用,用于释放资源

        // 如果无法保证应用主界面的 onDestroy() 方法被执行到,请移动以下接口到应用的退出逻辑里面调用

        // 插屏广告(包括普通插屏广告、轮播插屏广告、原生插屏广告)

        SpotManager.getInstance(mContext).onAppExit();

        // 视频广告(包括普通视频广告、原生视频广告)

        VideoAdManager.getInstance(mContext).onAppExit();

    }

    @Override

    public void onClick(View v) {

        switch (v.getId()) {

            // 插屏广告

            case R.id.btn_main_show_spot_ad:

                startActivity(new Intent(mContext, SpotAdActivity.class));

                break;

            // 轮播插屏广告

            case R.id.btn_main_show_slideable_spot_ad:

                startActivity(new Intent(mContext, SlideableSpotAdActivity.class));

                break;

            // 原生插屏广告

            case R.id.btn_main_show_native_spot_ad:

                startActivity(new Intent(mContext, NativeSpotAdActivity.class));

                break;

            // 视屏广告

            case R.id.btn_main_show_video_ad:

                startActivity(new Intent(mContext, VideoAdActivity.class));

                break;

            // 原生视频广告

            case R.id.btn_main_show_native_video_ad:

                startActivity(new Intent(mContext, NativeVideoAdActivity.class));

                break;

            default:

                break;

        }

    }

    /**

     * 获取应用版本号

     *

     * @return 应用当前的版本号

     */

    private String getAppVersionName() {

        try {

            PackageManager packageManager = getPackageManager();

            return packageManager.getPackageInfo(getPackageName(), 0).versionName;

        } catch (PackageManager.NameNotFoundException e) {

            return null;

        }

    }

}

运行效果如下:应用开屏广告、插屏广告、其它广告







DEMO下载(百度云):
http://pan.baidu.com/s/1i53LCFj
提取码:f99d
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: