MagicWindowSDK 使用文档(Android)

 

 

 

 

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

 

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值