MagicWindowSDK 使用文件(Android)
一 快速整合
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(必加項)
請在應用程式的入口Activity的OnCreate()方法中下新增以下程式碼:
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統計SDK從V4.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.