2016-03-30 13 views
0

Benim android uygulamasında oturum açma bilgilerimin özel başlıklarda yer aldığı güvenli bir siteye bağlanıyorum. Özel başlıkların yeni sayfa isteği ile gönderilmesi nedeniyle başarılı bir şekilde oturum açabiliyorum. Özel başlık bilgilerime dayanarak, cihazım için etkinleştirilen belirli bir sayfa işlevi var. Sorun şu ki, ana sayfasından kaynak yüklediğimde, webview.LoadUrl() öğesinde belirttiğim özel üstbilgileri girdikten sonra; gönderilmez. Sonuç olarak, giriş yapabilmem ancak cihazımla ilişkilendirilmiş özel işlevselliği almadım.android webview özel başlıklar sayfa dışına çıkmıyor kaynak istekleri

Bu geçersiz kılmaların her ikisini de denedim. shouldOverrideUrlLoading, URL'leri değiştirirken işe yaramış gibi görünüyor, ancak shouldInterceptRequest, kaynak isteklerinde çağrılmıyor gibi görünüyor mu? Eğer benim uygulamam işe yaramıyor mu?

 @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
      request.getRequestHeaders().putAll(getExtraHeaders()); 
      return super.shouldInterceptRequest(view, request); 
     } 


     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url, getExtraHeaders()); 
       return false; 

      } 

cevap

0

bu sizin için biraz daha iyi sonuç verip bakınız: yapıştırın/hazır kod

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     view.post(new Runnable() { 
      @Override 
      public void run() { 
       view.loadUrl(url, getExtraHeaders()); 
      } 
     }); 

     // true means: yes, we are overriding the loading of this url 
     return true; 
    } 

Bu ek kod sadece bir öneri/taslak olduğunu ve kesim olarak alınmamalıdır

@Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 

     String mimetype; 
     String encoding; 

     Map<String, String> headers = new HashMap<>(); 
     headers.putAll(request.getRequestHeaders()); 
     headers.putAll(getExtraHeaders()); 

     URL url = request.getUrl().toString(); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     for (String key : headers.keySet()) { 
      conn.setRequestProperty(k, headers.get(k)); 
      // TODO look for the mimetype and encoding header information and set mimetype and encoding 
     } 

     return new WebResourceResponse(mimetype, encoding, conn.getInputStream()); 
     // return null here if you decide to let the webview load the resource 
    } 
+0

Merhaba, Cevabınız için çok teşekkürler. – FranticCity

+0

Aslında benim shouldOverrideUrlLoading() uygulamasının iyi çalışıyor. Her yeni sayfa isteği üzerine çağrılıyor ve başlıklar ekleniyor. Sorun, web görünümü sayfa kaynaklarını talep etmeye başladığında ilk yükten sonra ortaya çıkar. Her kaynak isteğinde Ekstra başlık yok. Heres bir örnek. Web sayfamda "http://www.procato.com/my+headers/" başlık sınama sayfası yüklerseniz, sayfa yüklenir yüklenmez tüm doğru üstbilgileri görürüm. 2 saniye sonra sayfa sağdaki görüntüleri yüklediğinde, ekstra başlıklar istekte değildir. – FranticCity

+0

Cevabımı, olası bir öneri içerecek şekilde güncelledim. Görüntüler 'shouldInterceptRequest()' içinden geçer, böylece isteğinizi kendiniz bir 'URLConnection' ile halledebilirsiniz. Sana bir fikir vermek için bir kod yazdım, ama ben ya da bir şey test etmedim. Umarım yapbozun son parçası için size ilham verir. –