當前位置:首頁 » 安卓系統 » Androidh5頁面

Androidh5頁面

發布時間: 2023-07-09 09:21:20

⑴ Android 微信H5支付,無法拉起微信支付頁面

最近我其中一個項目需要接入微信支付,實現方式是在WebView里利用Url拉起微信支付頁面,但是實際操作的時候卻發現始終無法拉起支付頁面,最後排查了一段時間,發現原來是因為一個很簡單的問題出錯了,於是解決問題以後特意想把這個問題記錄下來分享,也便於以後自己解決同類問題。

可以看到,這里return 返回的是false,問題出在這里。這時我又在想,為什麼會這樣?

查閱資料以後我發現shouldOverrideUrlLoading的返回值的意義為:

那麼這種情況下,返回值應該改為 false或者super .shouldOverrideUrlLoading(view, url); ,因為微信支付調用 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb 這個開頭的url後,會重定向到 weixin://wap/pay 開頭的url,然後調用微信客戶端支付,如果用true,則WebView不會自動重定向到 weixin://wap/pay 開頭的url,需要程序員自行處理,這種情況下自然是無法吊起支付的。

⑵ Android h5頁面token失效(記錄項目的一個bug)

在做項目的時候,需要在原生頁面集成H5頁面,本地WebView會儲存網頁的橘余cookie。
cookie中會存入一些用戶信息和token。

這個token是有時效性,並且請求服務端的時候,服務端會進行token校驗。H5在載入的時候會將token寫入cookie中,並將cookie寫入對應的域(domain)名中。但是項目的圓汪滾域名改過,卻沒有將原先的cookie清除,導致又寫入新的cookie。再請求服務端的時候將根路徑下的cookie全上傳給服務端了,服務端根據cookie中的token別名去取 token(默認第一個),但是這個排序又是無序的。導致有時陵早會拿到錯誤的token。即返回登錄狀態失效,直接退出了。
截圖如下:

⑶ android開發中,webview常用於顯示網頁或h5頁面,一個遇到跨域方面的坑。

1.跨域cookie讀取

什麼是跨域,簡單的說就是不同的域名,我們都知道在pc上我們用瀏覽器訪問網址,不同的網址都會在本地存儲一些cookie信息,這樣就可以實現比如自動登錄等功能,在pc上不同域名是不能相互讀取其他域下的cookie信息的(非web專業開發人員,如果理解有誤,歡迎指出)。

但是在 android 上在api 23之前,是可以跨域讀取cookie的,比如A域寫入一個userId的cookie,B域可以讀取該值。但是在23時,系統將該值設置成了false,不再讓跨域讀取了。如果你的應用有跨域讀取需求,怎麼辦?可以採用如下方式進行開啟:

/*** 設置跨域cookie讀取*/

public final void setAcceptThirdPartyCookies() {

//target 23 default false, so manual set true

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            CookieManager.getInstance().setAcceptThirdPartyCookies(webView,true);       

}  

}

2.http/https混合載入

在現階段,很多網站都改成了https進行訪問,https可以提升訪問網站的安全性,防止信息被竊取,如果所有的網頁都是https且網頁內的鏈接也是都是https,那就沒有混合載入(文本區域https,圖片文件http載入)的問題了。但是很多資源現階段還沒有改變成https訪問,往往頁面都嵌入了http的鏈接。這種混合網頁如果不進行處理,直接載入是會出現錯誤的。怎麼解決這個問題?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

}

這也是一個分版本的函數,在api23之前,默認是可以混合載入的,但是在23時,默認值改成了MIXED_CONTENT_NEVER_ALLOW,因此如果你有混合載入的需求,設置setMixedContentMode為MIXED_CONTENT_ALWAYS_ALLOW。

3.無法解決跨域訪問問題,可以嘗試給webview設置如下配置,已解決該問題;

if (Build.VERSION.SDK_INT >= 16) {

Class clazz =webView.getSettings().getClass();

Method method = clazz.getMethod("", boolean.class);

if (method != null) {

method.invoke(webView.getSettings(), true);

}

}

} catch (IllegalArgumentExceptione) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:628
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:357
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:75
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:300
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:788
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:338
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:204
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:801
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:357
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:583