MagicWindowSDK 使用文档(Android)

原创 2015年07月10日 17:35:41

 

 

 

 

MagicWindowSDK
使用文档(Android)
V2.2 

一        快速集成

1.1    获取魔窗Appkey(移动端AndroidManifest.xml内的MW_APPID)

登录魔窗后台管理(http://mgnt.magicwindow.cn),按照步骤提示注册应用。

进入“应用设置”->”应用管理”->“关联应用” ,如下图所示填写相应内容,创建应用。并获取魔窗AppKey

1.2    安装SDK

jar文件对应列表:

平台

Jar

相应版本

魔窗

MagicWindowSDK.jar

最新版

微信

libammsdk.jar

修改日期:2015/2/5 大小:149KB

1.3    添加资源文件和jar文件

方法①:添加工程引用(升级方便,推荐)

解压SDK压缩包,将文件夹中的mw_sdk_library文件夹导入Eclipse(或者Android Studio),并在您的工程中添加对此项目的引用即可。

方法②:添加资源到现有项目中

解压SDK压缩包,将文件夹中的'main/libs'、' main/res'和' main/asserts'文件夹复制到您的项目工程根目录下(如使用'ADT 17'以下用户需要手动添加'libs'下的jar文件到工程Path中)

注意

①Android studio跟eclipse等IDE的目录结构可能不同,一定要放置正确的目录下!

②如果编译时提示微信分享等jar包重复,说明您的代码内已经有libammsdk.jar(微信分享)等jar包。请删除其中一个。

1.4    添加权限

<!-- 连接互联网Internet权限,以便向我们的服务器端发送数据。 -->
   <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 检测网络状态 -->
    <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 获取用户手机的IMEI,用来唯一的标识用户。 -->
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE" />
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 
    <!-- 缓存资源优先存入SDcard -->
   <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!—wifi状态 -->
   <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
   <uses-permissionandroid:name="android.permission.USE_CREDENTIALS" />
   <uses-permissionandroid:name="android.permission.MANAGE_ACCOUNTS" />
  <!-- GPS定位权限 -->
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" />
  <!—判断程序是否在前台运行 -->
<uses-permission android:name="android.permission.GET_TASKS" />

注意:GPS定位权限可关闭,如果关闭则不会定位用户当前位置。(对策略的精准投放有影响。)

1.5    添加activity以及Service信息

<!—后台service 必须注册!!!-->
<service android:name="com.zxinsight.analytics.service.SDKService"/>
<!—总的activity,必须注册!!! -->
<activityandroid:name="com.zxinsight.common.base.MWActivity"
android:exported="true"
android:configChanges="orientation|keyboardHidden|screenSize|navigation"/>
  <!--微信分享回调 -->
       <activity
           android:name=".wxapi.WXEntryActivity"
           android:theme="@android:style/Theme.Translucent.NoTitleBar"
           android:configChanges="keyboardHidden|orientation|screenSize"
           android:exported="true"
           android:launchMode="singleTop" />
 
<!—MW sdk ID 此处跟activity同级,需要放在Application内,MW_APPID(也就是后台的”魔窗AppKey”)不能更改 -->
       <meta-data
           android:name="MW_APPID"
android:value="您的魔窗AppId" />
<!—渠道名称MW_CHANNEL不能更改 -->
       <meta-data
           android:name="MW_CHANNEL"
           android:value="WanDouJia" />

1.6    微信分享,回调activity

a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自MWWXHandlerActivity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)


示例代码如下:

public class WXEntryActivity extends MWWXHandlerActivity{
 
// 微信发送请求到第三方应用时,会回调到该方法
   @Override
   public void onReq(BaseReq req) {
      //super.onReq(req);必须加
      super.onReq(req);
      //todo: 在下面添加你可能需要实现的代码
   }


// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
   @Override
   public void onResp(BaseResp response){
     //super.onResp(response);必须加
      super.onResp(response);
      //todo: 在下面添加你可能需要实现的代码
   }

}

1.7    渠道(channel)填写

<meta-data android:name="MW_CHANNEL"android:value="Channel ID"/>中的Channel ID替换为您应用的推广渠道名称。

例如在豌豆荚渠道推广此包,代码示例:

<meta-dataandroid:name="MW_CHANNEL" android:value="Wandoujia"/>

如不想在manifest里配置渠道(channel),可在Activity中配置:只需在程序启动时的Activity中调用此接口:

MagicWindowSDK.setChannel(Stringchannel)

注意:AndroidManife.xml里的优先级最高。如果此处定义了channel,则优先使用此定义。

命名规范:

可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不推荐使用。

首尾字符不可以为空格

最多256个字符

"unknown" 及其各种大小写形式,作为魔窗保留的字段,不可以作为渠道名


二         初始化SDK(必加项)

请在应用程序的入口ActivityOnCreate()方法中下添加以下代码:

MagicWindowSDK.initSDK(this);
 

如果希望获取SDK的版本,可以调用

MagicWindowSDK.getMagicWindowSDKVersion();<span style="font-weight: bold; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

三        创建活动

3.1    WEB端

登录魔窗后台管理(http://mgnt.magicwindow.cn/),按照步骤获取相应的魔窗位key

3.2    移动端

移动端最简单的ImageView显示。除了这个方法,我们还提供了具体的后台API数据接口。各开发者如果想自定义布局,可以通过这些接口获取相应数据。下面首先介绍ImageView布局。

3.2.1     布局layout

在需要展示入口的xml文件,把ImageView替换为com.zxinsight.MWImageView即可

代码示例:

<com.zxinsight.MWImageView
           android:layout_width="match_parent"
           android:layout_height="130dp"
           android:layout_marginTop="70dp"
           android:scaleType="fitXY"
android:id="@+id/mw_banner"/>

3.2.2     绑定魔窗位置ID

代码示例:

MWImageView imageView = (MWImageView)findViewById(R.id.mw_banner);
// windowKey魔窗窗体ID
imageView.bindEvent("windowKey ");

3.2.3     判断活动是否开启

如果想判断此活动是否开启,请用此API。以此为依据,可以在没活动的时候隐藏窗体

// context页面的设备上下文
// windowKey魔窗窗体ID
MarketingHelper.currentMarketing(context). isActive ("windowKey")

3.2.4     自定义魔窗窗体

魔窗在后台可配置如下内容:①活动展示图片。②活动标题。③活动内容。

我们可以根据这三个要素自定义魔窗的展示窗体。

示例:
<span style="color:#3333ff;"><span style="white-space:pre">	</span>//todo: 自定义魔窗位方式1</span>
       topLayout5 = (RelativeLayout) findViewById(R.id.top_5_layout);
       topTitle5 = (TextView) findViewById(R.id.top_5);
       topImg5 = (ImageView) findViewById(R.id.ic_top_5);
       if (marketingHelper.isActive(Constant.MW_2)) {
           //获取标题
           topTitle5.setText(marketingHelper.getTitle(Constant.MW_2));
           //获取背景图
           ImageLoader.getInstance().displayImage(marketingHelper.getImageURL(Constant.MW_2),topImg5);
           topLayout5.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //跳转到相应的webView
                   marketingHelper.toNativeWebView(Constant.MW_2);
                }
           });
       }
       //end
 
       <span style="color:#3333ff;">//todo: 自定义魔窗位方式2renderMarketing接口在2.3版本开放</span>
       customLayout1 = (RelativeLayout)findViewById(R.id.custom_style_layout_1);
       customImg1 = (ImageView) findViewById(R.id.img1);
       customTitle1 = (TextView) findViewById(R.id.title1);
       customDescription1 = (TextView) findViewById(R.id.description1);
 
        //Constant.MW_3 为魔窗位的key,customLayout1为点击响应的layout,customImg1为背景图,customTitle1标题,customDescription1描述
       marketingHelper.renderMarketing(Constant.MW_3, customLayout1,customImg1, customTitle1,customDescription1);
       //end
 
       <span style="color:#3333ff;">//todo: 自定义魔窗位方式3renderMarketing接口在2.3版本开放</span>
       customLayout2 = (RelativeLayout)findViewById(R.id.custom_style_layout_2);
       customImg2 = (ImageView) findViewById(R.id.img2);
       customTitle2 = (TextView) findViewById(R.id.title2);
       customDescription2 = (TextView) findViewById(R.id.description2);
       marketingHelper.renderMarketing(Constant.MW_4, customLayout2,  new RenderListener() {
           @Override
           public void setTitle(String s) {
                customTitle2.setText(s);
            }
 
           @Override
           public void setDescription(String s) {
                customDescription2.setText(s);
           }
 
           @Override
           public void setImage(String s) {
                ImageLoader.getInstance().displayImage(s,customImg2);
           }
       });
       //end


 

3.2.5     活动其他API

通过3.2.1和3.2.2已经完成魔窗的完整展示以及跳转等所有功能(但展示的仅仅是一张图片),如果你想自定义魔窗的展示布局,可以根据下面的API获取相应的活动内容,从而自定义布局,以及添加点击事件跳转到相应的webview。

①更新活动

活动默认更新策略是“程序启动时刷新活动”,如果有需要,你可以通过以下接口来实现单个活动或者全部活动(windowKey传值为null时更新全部活动)


// context页面的设备上下文
// windowKey魔窗窗体ID
// listener更新后的回调函数。
MarketingHelper.currentMarketing(context). updateMarketing(String windowKey, UpdateMarketingListener listener)
<span style="color:#3333ff;">示例:</span>
MarketingHelper.currentMarketing(mContext).updateMarketing(“windowKey”, new UpdateMarketingListener() {
    @Override
    public void success() {
        Log.e("update maketing",”windowKey = ”+ MarketingHelper.currentMarketing(mContext).getActivityKey(“windowKey”));
    }

    @Override
    public void failed(String error) {
        Log.e("update maketing",”error msg = ”+ error);
    }
}

②活动展示图片URL(参见3.2.4自定义魔窗位方式1)

// context页面的设备上下文
// windowKey魔窗窗体ID
MarketingHelper.currentMarketing(context).getImageURL("windowKey")

③活动名称(参见3.2.4自定义魔窗位方式1)

// context页面的设备上下文
// windowKey魔窗窗体ID
MarketingHelper.currentMarketing(context). getTitle("windowKey")

④活动的相关描述(参见3.2.4自定义魔窗位方式1)

// context页面的设备上下文
// windowKey魔窗窗体ID
MarketingHelper.currentMarketing(context). getDescription("windowKey")

⑤跳转到相应的webView(参见3.2.4自定义魔窗位方式1)

魔窗在APP中自定义展示,需要添加点击事件,点击响应事件

// context页面的设备上下文
// windowKey魔窗窗体ID
MarketingHelper.currentMarketing(context).toNativeWebView ("windowKey")

⑤点击直接分享

// Activity调用的activity
// windowKey魔窗窗体ID
//sUrl 分享的连接,如果传null,则根据windowKey自动获取分享连接
ShareHelper.share(Activity,mWindowKey,sUrl);
//或
ShareHelper.share(Activity,mWindowKey);

 

四        事件统计(必加项)

4.1    页面统计

4.1.1     普通activity页面统计

在需要页面追踪的activity的响应函数里加入以下代码:

   

 @Override
protected void onPause() {
       TrackAgent.currentEvent().onPause(this);
       super.onPause();
    }
 
    @Override
protected void onResume() {
       TrackAgent.currentEvent().onResume(this);
       super.onResume();
}

 

注意:如果想给当前页面自定义名字,可以将

TrackAgent.currentEvent().onPause(this);

更换为

<span style="color:#ff0000;">TrackAgent.currentEvent().onPause(this, “您的页面名字”);</span>

4.1.2     带有Fragment的页面统计

Fragment页面必须带有页面名称。

TrackAgent.currentEvent().onPause(getActivity(),“您的页面名字”);

这样处理后,系统会自动把包含此Fragment的activity的页面统计忽略掉。(同一个activity之内的Fragment页面切换可以被统计。)

4.1.3地理位置经纬度传递

如果需要,可通过下面这个API将经纬度传递过来。

// context页面的设备上下文
// latitude经度(Double)
// longitude纬度(Double)
TrackAgent.currentEvent().setLocation(context, latitude,longitude);

4.1.4     自定义事件类型

自定义事件分为2大类:

(1)统计次数(时间点事件):统计指定行为被触发的次数。

(2)统计时长(时间段事件):统计指定行为消耗的时间,单位为秒。需要begin接口与end接口成对使用才生效。

其中每类事件都有Key-Value参数类型和不定长字符串参数类型。

注意:

①如果代码同时使用了这2种参数类型,event_id最好不一样。

②event_id需要先在魔窗网站上面注册,才能参与正常的数据统计。event_id不能包含空格或转义字符。

4.1.5     注册自定义事件

自定义事件的注册(配置)包括事件id的注册和事件,id下参数信息的注册。

step1:登陆魔窗前台,选择左边选择“自定义事件”。

step2:选择“新增事件”,按照需求填写事件id、key、value等信息。

step3:可以在查看详情下的“参数”查看事件id下所有参数上报的明细。

4.1.6     统计场景举例

(1)    时间点事件

统计发生次数

// context页面的设备上下文
// eventId事件标识
TrackAgent.currentEvent().customEvent(Context context,"event id");

统计带属性的行为触发次数

// context页面的设备上下文
// eventId事件标识
// properties事件参数的键值对
TrackAgent.currentEvent().customEvent(Context context,"event id", Map<String,String>);
<span style="color:#3333ff;">代码示例:</span>
统计电商应用中“购买”事件发生的次数,以及购买的商品类型及数量,那么在购买的函数里调用:
HashMap<String,String>map = new HashMap<String,String>();
map.put("type","book");
map.put("quantity","3");
MobclickAgent.onEvent(mContext,"purchase", map); 
TrackAgent.currentEvent().customEvent(Context context,"event id", map);

(2)时间段事件

<span style="color:#3333ff;">代码示例:</span>
// context页面的设备上下文
// eventId事件标识
// properties 事件参数的键值对
//调用位置:事件开始时调用
TrackAgent.currentEvent().customEventStart(Contextcontext, String eventId );
//调用位置:事件结束后调用
TrackAgent.currentEvent().customEventEnd(Context context,String eventId, Map<String,String> properties);

4.1.7     错误统计

Android统计SDKV4.6版本开始内建错误统计,不需要开发者再手动集成。SDK自动捕获程序崩溃日志,并在程序下次启动时发送到服务器。 
如不需要错误统计功能,可通过此方法关闭 TrackAgent.currentEvent().shutDownCrashTrack(Context context);

如果开发者自己捕获了错误,需要上传到友盟服务器可以调用下面方法:

TrackAgent.currentEvent().reportError(Context context,String error)  
//或 
TrackAgent.currentEvent().reportError(Context context,Throwable e)

注意

如果需要混淆代码,为了保证sdk的正常使用,需要在proguard.cfg加上下面两行配置:

-keep class com.tencent.mm.sdk.** {*;}
-keep class com.zxinsight.** {*;}


五        测试与调试

5.1    测试前的准备

Ÿ  确认所需的权限都已经添加:INTERNET, READPHONESTATE等

Ÿ  确认MW_APPID与WECHAT_APPID已经正确的写入Androidmanifest.xml

Ÿ  确认MWActivity与SDKService在Androidmanifest.xml里正确声明

Ÿ  确认所有的Activity中都调用了onResume和onPause方法

Ÿ  确认测试手机(或者模拟器)已成功连入网络

注意:如果你的项目之前已经集成了shareSDK的分享功能,请参照:

“SDK文档-Android-with-ShareSDK.pdf”

5.2    普通测试流程

使用普通测试流程,请先在程序入口添加以下代码打开调试模式:

MagicWindowSDK.setDebugMode( true ); 

打开调试模式后,您可以在logcat中查看您的数据是否成功发送到魔窗服务器,以及集成过程中的出错原因等。

Log的tag

用途

结果

SDKIntegrationTest

查看集成是否成成功

数据是否成功发送到魔窗服务器(the data has sent successfully)

SDKIntegrationDebug

集成遇到问题时的log

查看集成遇到的问题

SDKDebug

其他log

系统调试的一些其他log

 

注意:请使用普通测试流程,您的测试数据会与用户的真实使用数据同时处理,从而导致一定的数据污染。

相关文章推荐

从浏览器直接转跳到APP具体页面---(魔窗)MagicWindow使用教程

想要实现在网页里一键调到你APP的指定页面吗,好比打开 JD的一个商品的网页,从网页调到APP这个商品的页面。APP服务化, 使用魔窗SDK可以轻松实现!老规矩:效果图奉上 1.注册魔窗账号,创建A...

最近弄魔窗SDK踩过的坑

先扔上两个魔窗的官方文档哈: 魔窗iOS官方文档 魔窗中遇到的问题 其中具体的key 具体的使用 这个吧 就一一看文档对应就好了 还有视频 虽然视频跟实际官网后台有差距的 但还是可以看得懂的 ,我...

安卓 魔窗SDK 快速接入

首先要清楚目标是什么?魔窗官网有成果视频展示,接入之前最好看一下,方向不对努力白费,不要急着对着文档操作 ,  理清思路   。...

Android Studio魔法手指,让SDK集成快一点,再快一点!

集成sdk时,怕漏写代码?怕发版时混淆?魔法金手指,让sdk集成So Easy……

网狐棋牌数据库配置问题

问题: 在 sys.servers 中找不到服务器 'QPGameUserDBLink'。请验证指定的服务器名称是否正确。如果需要,请执行存储过程sp_addlinkedserver 以将服务器添加到...
  • hnyzyty
  • hnyzyty
  • 2015年05月26日 23:00
  • 3066

数据库异常 找不到存储过程GSP_GR_LoadSensitiveWords

  • piazini
  • piazini
  • 2013年08月06日 09:59
  • 7176

Android Studio官方文档之使用布局编辑器来设计UI界面

Android Studio官方文档之使用布局编辑器来设计UI界面 Android Studio中提供了一个高级的布局编辑器,它可以使你直接向布局中拖放现成的组件和提前预览你正在编辑的布局的样式。在这...

使用Android Studio进行NDK开发和调试(gradle-experimental之官方文档的翻译说明)

版本更新版本更新的信息可以通过以下路径进行获取 gradle-experimental版本更新环境要求 Gradle(参照三里边的版本要求) Android NDK r10e Build Tool在...

使用官方帮助文档学习android

在介绍其他的东西之前我们先学习如何下载,打开和使用Google提供的android参考文档,有助于我们之后的学习。 我使用的是Android Studio做开发的,下面截图为Android Studi...

Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询

原文地址:http://android.xsoftlab.net/training/load-data-background/index.html 引言 在ContentProvider中查询...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MagicWindowSDK 使用文档(Android)
举报原因:
原因补充:

(最多只允许输入30个字)