1. 程式人生 > >MagicWindowSDK 使用文件(Android)

MagicWindowSDK 使用文件(Android)

MagicWindowSDK 使用文件(Android) V2.2

一        快速整合

1.1    獲取魔窗Appkey(移動端AndroidManifest.xml內的MW_APPID)

進入“應用設定”->”應用管理”->“關聯應用” ,如下圖所示填寫相應內容,建立應用。並獲取魔窗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

注意:請使用普通測試流程,您的測試資料會與使用者的真實使用資料同時處理,從而導致一定的資料汙染。

相關推薦

MagicWindowSDK 使用Android

MagicWindowSDK 使用文件(Android) V2.2 一        快速整合 1.1    獲取魔窗Appkey(移動端AndroidManifest.xml內的MW_APPID) 進入“應用設定”->”應用管理”->“關聯應用”

第四次作業——關於石墨Android客戶端的案例分析

關於石墨文件(Android)客戶端的案例分析 作業地址:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505】 第一部分調研,評測 1、下載並使用,按照描述的bug定義,找3~5個功能性的比較嚴重的bug。請用專業的語言描述(每個bug 不

NFC技術:使用Android Beam技術傳輸

imp 圖片 .com fault gen catch ret generate puts 1 public class MainActivity extends ActionBarActivity implements 2 CreateBeamUr

關於xamarin.forms Android創建與寫 ftp

lob eth fin read 讀寫文件 res card 創建 生態 現在讀寫文件在Android原生態應該不在話下了。但是xamarin.forms應該如何用呢 1 //獲取文件的名稱含有後綴 2 string strName = Path.GetFileName(

Android 4.0 Launcher2源碼分析——主布局

not sch png 默認 顯示效果 target ots eat col 本文來自http://blog.csdn.net/chenshaoyang0011 Android系統的一大特色是它擁有的桌面通知系統,不同於IOS的桌面管理,Android有一個桌面系統用於管

Android [Camera 原始碼] 建立和提交請求(Request Creation) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 該Google Camera的文件為系列文章,文章列表: overview Camera3 HAL Subsystem Metadata and Con

Android [Camera 原始碼] 錯誤和資訊流處理(Errors and Streams) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 該Google Camera的文件為系列文章,文章列表: overview Camera3 HAL Subsystem Metadata and Con

Android [Camera 原始碼] 輸出流和剪裁(Output and Cropping) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 該Google Camera的文件為系列文章,文章列表: overview Camera3 HAL Subsystem Metadata and Con

Android [Camera 原始碼] 3A 模式和狀態轉換(3A Modes and State) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 該Google Camera的文件為系列文章,文章列表: overview Camera3 HAL Subsystem Metadata and Con

Android [Camera 原始碼] 元資料和控制元件(Metadata and Controls) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 該Google Camera的文件為系列文章,文章列表: overview Camera3 HAL Subsystem Metadata and Con

Android [Camera 原始碼] 相機 HAL3(Camera3) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 該Google Camera的文件為系列文章,文章列表: overview Camera3 HAL Subsystem Metadata and Con

Android [Camera 原始碼] HAL 子系統(HAL Subsystem) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 該Google Camera的文件為系列文章,文章列表: overview Camera3 HAL Subsystem Metadata and Con

Android [Camera 原始碼] 概述(overview) Google官方

Google原始碼網地址連結:https://source.android.com/devices/camera 看了幾天Camera HAL的實現以及底層的camera驅動/binder驅動,之間的Camera Binder傳輸,訊息Event傳送機制,搞得頭暈腦脹,每個模組都涉及很多方面的知

Android Data Binding Library 官方

Data Binding Library (資料繫結庫),旨在減少繫結應用程式邏輯和佈局所需的一些耦合性程式碼 最低支援Android 2.1 (API Level 7) 構建環境 使用gradle外掛1.5-alpha1以上 在build.gr

java刪除夾下面的所有

str try 一個 ... cmd 刪除一個文件 文件夾 style exec 原文地址:http://blog.csdn.net/smach1991710/article/details/9175757 刪除一個文件夾下面的所有文件,一種調用遞歸算法,一種調用windo

Cocos2dx 遍歷 夾下所有的草稿

cmp add cto filename () lena tin s2d sdi 備份,怕忘了 static std::vector<string> getFilePathAtVec(string folderPath, int depth) {

怎樣清空文上傳控裏的選定路徑

自己 pri 簡約 fileinput 不變 接受 騰訊 span ref 我又來扯雞毛蒜皮了。有名言曰人生短得不夠扯雞毛蒜皮,但我的工作就是由無數的雞毛蒜皮組成,如之奈何? 今天的雞毛和蒜皮是:怎樣清空文件上傳控件裏的選定文件(路徑)? 場景是醬紫

grunt 合並壓縮js和css

1.0 ajax depend cnp com .html post tle runt 具體node及文件配置請看: grunt 安裝使用(一) 要壓縮的文件 --src/ ajax.js assets.js touch.js zepto.js

用shell查找某目錄下的最大

log 異常 nbsp 過濾 exe -type 信息 int div 這是一個很有趣的問題,因為作為一個shell菜鳥,我第一時間是沒有任何想法的。心裏納悶為什麽這樣的操作Linux居然沒有直接的命令實現這樣的查詢。 很自然地,第一感覺就是用awk去實現,因為菜鳥我看aw

Mysql ==》

mys 字段名 utf cnblogs show 復制 key 創建 記錄 表介紹: 表相當於文件,表中的一條記錄就相當於文件的一行內容,不同的時,表中的一條記錄有對應的標題,稱為表的字段。 例如: id,name ,age 就稱為字段,其余的,一行內容稱為一條記錄。 1.