0571-89265925
您的(de)當前位置: > 杭楷觀點 > 小白知道 >

基于webview/UIwebView的(de)app移動網絡下(xià),徹底清除運營商标志、廣告和(hé)域名劫持廣告

時(shí)間:2017-06-06

有些人(rén)開發了(le)一個(gè)基于html5的(de)app,開發好了(le),一般會遇到以下(xià)問題。
1.在中國移動網絡下(xià),右下(xià)角多(duō)出來(lái)一個(gè)圓形的(de)中國移動運營商标志(本來(lái)是一件好事,但是移動網絡下(xià),用(yòng)戶手機網速和(hé)流量已經緊缺的(de)情況下(xià),居然還(hái)要加載這(zhè)種耗流量的(de)東東,簡直太反人(rén)類設計了(le))。
2.在wifi網絡下(xià),頁面的(de)底部會偶發性得(de)多(duō)出來(lái)長(cháng)條廣告,嚴重影(yǐng)響頁面的(de)美(měi)觀和(hé)性能(這(zhè)種情況下(xià)應該屬于運營商域名劫持或ip劫持)。

現在,杭諧科技的(de)技術爲大(dà)家提供一種非常好的(de)方法,能夠徹底清除這(zhè)種惡瘤。還(hái)用(yòng)戶一個(gè)清潔的(de)上網環境。這(zhè)裏就說一下(xià)android版本的(de)方法(ios方法同理(lǐ))


實現原理(lǐ):由于中國移動标識和(hé)其他(tā)的(de)廣告都直接會自動在頁面填寫js文件,所以這(zhè)裏直接判斷url是否包含js文件,然後再判斷url是否是本app授權的(de)域名,如果沒有授權說明(míng)是其他(tā)的(de)外部網址,則過濾掉,并在sdcard裏面創建這(zhè)個(gè)js文件,這(zhè)樣就無需關注具體是哪個(gè)js文件,反正不是本站授權的(de)文件統統過濾掉。關鍵是public WebResourceResponse shouldInterceptRequest(WebView view,String url)這(zhè)個(gè)方法,就是截取請求的(de)url然後替換本地的(de)url。當然,你也(yě)可(kě)以用(yòng)這(zhè)個(gè)方法過濾:jpg、png、css等等。反正後期服務商該後綴名了(le),你添加一下(xià)類型就好

webView.setWebViewClient(new WebViewClient(){
@SuppressLint ("NewApi")
       @Override  
       public WebResourceResponse shouldInterceptRequest(WebView view,String url) {
           if(url.contains(".js")){
        if(!url.contains("hzappkf.com")){
        String result = url.substring(url.lastIndexOf('/')+1);
        Tools.writeToFile("",getApplicationContext(), result);
        return getWebResourceResponse_sdcard(result);  
        }
        }
           return super.shouldInterceptRequest(view, url);  
       } 
}
public static void writeToFile(String data,Context context,String fileName) {
 
 if(!fileExists(context,fileName)){
 try {
       OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE));
       outputStreamWriter.write(data);
       outputStreamWriter.close();
   }
   catch (IOException e) {
       
   } 
 }
}


 
@SuppressLint("NewApi")  
private WebResourceResponse getWebResourceResponse_sdcard(String fileName){  
WebResourceResponse res = new WebResourceResponse("text/javascript", "UTF-8", Tools.readFromFile(getApplicationContext(), fileName));  
   return res; 
}


 
 
 public static InputStream readFromFile(Context context,String fileName) {
 InputStream ret=null;
try {
ret = context.openFileInput(fileName);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
return ret;
}
 public static boolean fileExists(Context context, String filename) {    
   File file = context.getFileStreamPath(filename);
   if(file == null || !file.exists()) {
       return false;
   }
   return true;
}
 

  • 7*12小時(shí)售後支持
  • 30+純技術開發團隊
  • 1000+客戶選擇
  • 7200小時(shí)穩定運營

Copyright © 2015-2022 hzappkf.com 杭州明海科技有限公司 版權所有 京ICP證000000号

微信咨詢
回到頂部
在線咨詢