Mraid入门教程

作者: 魏永_Owen_Wei | 来源:发表于2017-08-08 17:43 被阅读0次

Mraid(Mobile Rich Media Ad Interface Definitions)移动端富媒体广告接口标准,是移动应用中普遍使用的富媒体广告接口。提供了众多标准化的接口(展开,缩放,访问设备功能等),开发者可以基于此开发各种形式的广告。


Mraid(https://www.iab.com/guidelines/mobile-rich-media-ad-interface-definitions-mraid/)最大的贡献就是统一了一套广告创意的开发标准。以前需要为各个APP定制创意(如果需要和APP交流),借助Mraid只需要一套代码就能在所有内嵌了Mraid SDK的APP上运行,而且保证展示效果一致。其次,它提供了众多标准方法,简化了开发工作量。尤其是能够访问一些设备的信息,这在以前依靠JavaScript是完全不可能实现的。

基本概念

1.Ad View/Container

展示创意的区域。containers一般由SDK提供,一个SDK可能提供多个container。

2.Close Event Region

关闭时间区域,点击这个区域就会返回默认状态。比如扩展创意关闭后返回小图状态,插屏广告关闭后消失。

3.Close Indicator

关闭标识。一般是一个叉号的图片,告诉用户点击这里可以关闭创意。

4.Controller

创意通过控制器来完成相关的交互任务。

5.Density-Independent Pixels

目标独立像素。我认为这是mraid的一个伟大成就。由于各个设备的分辨率不同,像素点的大小也不一样。因此相同的设置会在不同的设备上显示各异。mraid的解决办法就是不计算真实的像素大小,计算目标独立像素(个人翻译)然后应用到不同设备上,保证了不同设备显示的一致性。

6.InLine Ad

行内广告,eg: banner广告。

7.Interstitial Ad

插入广告, eg:插屏广告。

8.Physical Pixels

物理像素,mraid不计算物理像素。

9.SDK

不解释。

10.WebView

展示创意的组件,可以执行HTML的渲染和JavaScript脚本。


各个组件关系

开发要求

需要一个实现了mraid标准的SDK。要求SDK实现两个功能。

  • 定义一个原生的container来展示创意。
  • 定义一个JavaScript控制器来和创意进行交互。

初始化

引入mraid.js脚本,实现的方式有很多:

  • 使用script标签直接引入
<script src="mraid.js"></script>
  • js脚本写入
  • SDK支持的其他方式

Mraid 2.0支持的方法和事件

Mraid 2.0支持的方法和事件
1.ready事件

表明mraid的JavaScript库可用。
例子:

mraid.addEventListener('ready',function(){
  //put your code here
})
2.getVersion方法

返回mraid的版本。

console.log(mraid.getVersion()); //2.0
3.addEventListener方法

可以监听事件。多个监听器可以监听同一个事件,一个监听器可以监听多个事件。(文档原文,有点不理解一个监听器如何监听多个事件)

mraid.addEventListener(event,listener)
event//事件
listener//执行函数
4.removeEventListener方法

用法与addEventListener类似,移除事件监听。

mraid.removeEventListener(event,listener)
event//事件
listener//需要移除的函数
5.error 事件
mraid.addEventListener(error,function(message,action){
  //message 错误类型描述
  //action 引起错误的
})

添加照片至相册,日历添加事件,重置窗口大小等操作最有可能引发错误,所以建议在使用这些方法时添加error监听。

6.getState方法和 stateChange事件

getState返回container当前的状态。
stateChange会在状态改变时触发。一个mraid广告一个时刻只能拥有一个状态。


状态列表
7.getPlacementType方法

返回创意类型是bannner广告还是插入式广告。

8.isViewable方法和viewableChange事件

判断创意是否在屏幕上显示。

9.open()

最常用的方法之一。

  • 打开一个新的URL,一般新页面会在APP内部打开,也可能会调用本地浏览器打开。
  • 全屏显示
  • 没有附加参数
10.expand
  • 全屏显示
  • 有少量参数(可设置展开的宽高等)
  • 支持单个或者两段式创意
11.resize
  • 没有默认值可以放大或者缩小尺寸
  • 需要其他参数和函数
  • 值适用于单部分创意(不适用于两段式创意)

注意点

1.尽可能早的引入mraid.js

HTML

<html> <head> <script src="mraid.js"></script>

Script

<script type="text/javascript">
var head = document.getElementsByTagName('head').item(0),
js = document.createElement('script'),
s = 'mraid.js';
js.setAttribute('type', 'text/javascript');
js.setAttribute('src', s);
head.appendChild(js);
</script>
2.执行初始化函数之前检测页面状态
function init() {
var success = false;
if (document.readyState === 'complete') {
if (typeof mraid !== 'undefined') {
if (mraid.getState() === 'loading') {
mraid.addEventListener('ready', displayAd);
} else if (mraid.getState() === 'default') {
displayAd();
}
success = true;
}
}
return success;
3.两段式展开广告
  • 创建两段式展开广告时,第二段必须是一个完整的HTML,不能是一个HTML片段。
  • 在第二段中必须使用script标签引入mraid.js。
  • 尽管mraid.expand()可以接受URL参数,但是不能用来记录点击。建议使用mraid.open()来监测点击。
4.插页广告

插页广告需要一个关闭标志,可以通过usecustomclose(true)来隐藏默认的关闭标志。

常见错误

1.添加 ready 事件监听不生效

可能因为创意在容器(页面)加载MRAID库完成之前就调用了MRAID。这可能导致创意展示错误。

2.没有为移动设备做页面优化

添加下面的HTML片段能让创意自动缩放至设备宽度。

<meta name='viewport' content='width=device-width,initial-scale=1,maximum-scale=1'>
3.点击创意没有调用 mraid.open()

可能是页面中使用了超链接<a>。超链接在Mraid中无法被准确的识别,所以无法一致性的执行。超链接有时候会被完全忽略,有时候会使用设备原生浏览器打开。为了保证效果的一致性,不要使用超链接或者window.open,统一使用mraid.open()。

4.引用第三方库,但没有使用第三方库的ready方法

比如JQuery库中也有ready方法,如果你在元素中绑定了方法,请确保在执行jQuery函数之前所有的元素都已经加载完了。

5.初始化失败

即使没有使用jQuery,也需要判断两个ready状态。window.readymraid.ready,这两个状态是相互独立的。一个完成了,另一个可能还没有完成,所以两个都需要判断,都ready之后才能进行初始化操作。甚至需要判断 isViewable

6.检验isViewable失败

有可能因为设备或网络原因页面加载太慢,或者用户已经切换到了其他界面。每次开始执行方法或者动画之前都要进行isViewable的判断。

7.isViewable的理解错误

isViewable是为了让创意知道什么时候开始进行初始化操作。之后不再监控isViewable,及时用户将APP至于后台运行,isViewable的值也不会改变。所以不能通过isViewable的值判断页面是否可见,也不能用来统计曝光次数。

8.缩放插屏广告

在MRAID中禁止对插屏广告进行resizeexpand操作。使用至两个函数会导致错误。

9.多次展开广告

expand函数只能调用一次,之后的调用都会被忽略。如果需要多次改变大小,可以使用resize函数。

个人总结

经过一段时间的了解和使用,感觉mraid并不是必须的。它的主要贡献就是将HTML5的一些功能进行了封装,保证了一致性。如果生产中并没有要求,完全可以使用HTML5实现mraid的所有功能。学习和开发成本会低很多。

相关文章

网友评论

    本文标题:Mraid入门教程

    本文链接:https://www.haomeiwen.com/subject/ocwjlxtx.html