Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

           SDK提供了调试的功能,在应用集成调试过程中,可以调用以下接口打开日志进行查看:

Code Block
UmsAgent.setDebugEnabled(boolean isEnableDebug); //是否打开调试功能
UmsAgent.setDebugLevel(LogLevel); //定义SDK的log输出等级
LogLevel的定义如下:
public enum LogLevel {
Info, // equals Log.INFO, for less important info
Debug, // equals Log.DEBUG, for some debug information
Warn, // equals Log.WARN, for some warning info
Error, // equals Log.ERROR, for the exceptions errors
Verbose // equals Log.VERBOSE, for the verbose info
}

           注意:在打包发布前请将日志功能关闭。

 
  • H5页面数据统计

 

           在JavaScript中调用jar包中的原生方法(针对H5页面)

 

      6.1 封装一个Java类 如 JSUMSAgent (SDK 中已经提供该类)

 
Code Block
import android.content.Context;public class JSUMSAgent {
 Context context;
public JSUMSAgent(Context context) {
 super();
 this.context = context;
 }
 public void bindUserIdentifier(String identifier){
 UmsAgent.bindUserIdentifier(context, identifier);
 }
   
 public void onError(String errorInfo){
 UmsAgent.onError(context, errorInfo);
   
 }
  
 public void postTags(String tags){
 UmsAgent.postTags(context, tags);
 }
   
 public void onEvent(String event_id){
 UmsAgent.onEvent(context, event_id);
 }
   
 public void onEvent(String event_id, int acc){
 UmsAgent.onEvent(context, event_id, acc);
 }
 public void onEvent(String event_id,
 String label, int acc) {
 UmsAgent.onEvent(context, event_id, label, acc);
 }
 public void onEvent( String event_id,
 String label, String json) {
 UmsAgent.onEvent(context, event_id, label, json);
 }
 public void onGenericEvent(String label,String value){
 UmsAgent.onGenericEvent(context, label, value);
 }
 public void postWebPage(String pageName){
    UmsAgent.postWebPage(pageName);
 }
}
 

       6. 2 在入口activity中创建该对象,同时将该对象传递到JavaScript中

 
Code Block
mWebView=(WebView)findViewById(R.id.wv_test);JSUMSAgent jsUmsAgent = new JSUMSAgent(this);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(jsUmsAgent , "umsagent");// 如果HTML页面放到了服务端,IOS和Android使用一套页面别名需要统一为umsagent
 

       6.3 在JavaScript中通过umsagent调用对应的方法。

 
Code Block
 umsagent.onEvent(event_id);
 

       6.4 WebView注入Java对象注意事项

 

               在android4.2以前可以采用以上的方式直接注入Java对象,在android4.2之后注入对象的方法要加注释语句@JavascriptInterface
               如下:

 
Code Block
public class JSUMSAgent { Context context;
public JSUMSAgent(Context context) {
 super();
 this.context = context;
 }
 @JavascriptInterface
 public void bindUserIdentifier(String identifier){
 UmsAgent.bindUserIdentifier(context, identifier);
 }
 @JavascriptInterface
 public void onError(String errorInfo){
 UmsAgent.onError(context, errorInfo);
   
 }
 @JavascriptInterface
 public void postTags(String tags){
 UmsAgent.postTags(context, tags);
 }
 @JavascriptInterface
 public void onEvent(String event_id){
 UmsAgent.onEvent(context, event_id);
 }
 @JavascriptInterface
 public void onEvent(String event_id, int acc){
 UmsAgent.onEvent(context, event_id, acc);
 }
 @JavascriptInterface
 public void onEvent(String event_id,
 String label, int acc) {
 UmsAgent.onEvent(context, event_id, label, acc);
 }
 @JavascriptInterface
 public void onEvent( String event_id,
 String label, String json) {
 UmsAgent.onEvent(context, event_id, label, json);
 }
 @JavascriptInterface
 public void onGenericEvent(String label,String value){
 UmsAgent.onGenericEvent(context, label, value);
 }
 @JavascriptInterface
 public void postWebPage(String pageName){
  UmsAgent.postWebPage(pageName);
 }
}
 

       经过查官方文档所知,因为这个接口允许JavaScript 控制宿主应用程序,这是个很强大的特性,但同时,在4.2的版本前存在重大安全隐患,因为JavaScript 可以使用反射访问注入webview 的java对象的public fields,在一个包含不信任内容的WebView中使用这个方法,会允许攻击者去篡改宿主应用程序,使用宿主应用程序的权限执行java代码。因此4.2以后,任何为JS暴露的接口,都需要加@JavascriptInterface

 


 
  • 代码混淆

 

           代码混淆是请不要混洗jar包中的内容,请在混淆文件中添加:

 

           -keep class com.wbtech.ums.** {*;}

 
Info

注意事项

  • 权限
    确认所需的权限都已经添加
  • 联网检查
    确认测试手机或者模拟器已成功连入网络