十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
1.keychain 鑰匙串訪問(wèn)
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了南岳免費(fèi)建站歡迎大家使用!
2.申請(qǐng)開(kāi)發(fā)證書(shū)
3.注冊(cè)Bundle ID
4.配置開(kāi)發(fā)證書(shū) (生成.mobileprovision文件)
5.安裝證書(shū)
6.打包ipa
7.開(kāi)發(fā)團(tuán)隊(duì)如何公用證書(shū)
進(jìn)入以下程序
此文件保存到你想保存的地方,后面生成證書(shū)有用。
1.打開(kāi) 蘋(píng)果開(kāi)發(fā)者中心 ( )
2.按照以下圖片步驟走:
上面省略的步驟,按照具體需要選擇,基本是“傻瓜式點(diǎn)擊
到這bundle id就OK了
.mobileprovision文件格式的配置文件是讓開(kāi)發(fā)者的項(xiàng)目(APP)能有真機(jī)調(diào)試,發(fā)布的權(quán)限。
配置開(kāi)發(fā)證書(shū),就會(huì)需要你設(shè)置,在這個(gè)項(xiàng)目中添加哪些設(shè)備作為真機(jī)調(diào)試的設(shè)備
1.Xcode打開(kāi)以下文件夾
2.三個(gè)必填項(xiàng)
4.選擇發(fā)布平臺(tái):
1.本地安裝完.cer證書(shū)文件
輸入密碼之后點(diǎn)擊好,即可生成.p12文件
每次將Flutter應(yīng)用打包iOS上傳到App Store Connect之后,都會(huì)收到以下電子郵件警告,但不影響正常構(gòu)建版本。但是煩躁,解決如下:
大意就是 缺少推送相關(guān)的配置信息,其實(shí)在開(kāi)發(fā)者網(wǎng)站配置證書(shū)的時(shí)候一般都進(jìn)行 ‘推送功能’ APNs 勾選,但是項(xiàng)目中暫未設(shè)置推送配置,所以警告。
思路兩個(gè)方向:
ITMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/Flutter.framework/Flutter: _ptrace.?
原因: 使用了 Flutter 的debug 版產(chǎn)物?打成 iPa 包?
就是Frameworks/Flutter.framework 是debug 版的產(chǎn)物
Debug 版的 Flutter 產(chǎn)物 ,SDK 內(nèi)部使用了 蘋(píng)果內(nèi)部私有的API , 會(huì)被蘋(píng)果審核監(jiān)測(cè)到,存在安全性隱患. 導(dǎo)致拒絕上傳到蘋(píng)果后臺(tái).
產(chǎn)生的原因: 因?yàn)殚_(kāi)發(fā)過(guò)程中,直接使用了debug 模式進(jìn)行開(kāi)發(fā), 在打包的時(shí)候,直接打開(kāi) iOS 文件夾下面的工程,在Xcode 里設(shè)置 release 模式時(shí),此時(shí),Flutter 的產(chǎn)物還是 debug 模式下的產(chǎn)物. 沒(méi)有刪除替換成 release 產(chǎn)物
1.先 將工程 清理一遍,清理之前debug模式下 的Flutter 產(chǎn)物
2.然后 打開(kāi)Xcode 工程,配置好相關(guān) 版本號(hào),證書(shū),release 模式
3. 使用命令行 打包 release ,這樣Flutter.framework就會(huì)生成 release? 產(chǎn)物
4.最后 在Xcode 工程內(nèi),按照正常 打包上傳 包過(guò)程就可以了
1.進(jìn)入 Flutter 工程 命令行操作
flutter clean
2 .清理之前debug 模式下的 殘留產(chǎn)物 (或者手動(dòng)進(jìn)入文件夾刪除)
rm -rf ios/Flutter/Flutter.framework
3.?獲取 Flutter 的第三方依賴庫(kù)
flutter pub get
4.編譯 release 打包 產(chǎn)物?
flutter build ios --release?
(此時(shí)這里可以打包出 app 了, 為了安全起見(jiàn),最好再次進(jìn)入Xcode 清理一遍,直接打包上傳,)
上面這一步,主要目的是生成 Flutter.framework? 的release 版本產(chǎn)物
5.進(jìn)入Xcode 工程,clean 一遍,檢查相關(guān)證書(shū)配置,版本號(hào)等
6.直接 Xcode? Archive 打包IPA 上傳 蘋(píng)果后臺(tái)
最后上傳成功:
思路: 通過(guò)檢查Flutter.framework 它的CPU 架構(gòu)支持
如果: 該產(chǎn)物 支持模擬器 x86_arm64 這樣的架構(gòu)的話,說(shuō)明該產(chǎn)物就是 Debug 版的 產(chǎn)物
因?yàn)閞elease 版的 產(chǎn)物是 不支持 模擬器CPU架構(gòu)的.? ?
輸入終端命令:? lipo -info? 產(chǎn)物的物理路徑
比如:? lipo -info /Users/zzc/Documents/rce_flutter/ios/Flutter/Flutter.framework/Flutter
1. keystore 的生成
=
2.安卓工程配置 keystore
1. key.properties 內(nèi)容
2. app build.gradle
Flutter Dio源碼分析(一)--Dio介紹
Flutter Dio源碼分析(二)--HttpClient、Http、Dio對(duì)比
Flutter Dio源碼分析(三)--深度剖析
Flutter Dio源碼分析(四)--封裝
Flutter Dio源碼分析(一)--Dio介紹視頻教程
Flutter Dio源碼分析(二)--HttpClient、Http、Dio對(duì)比視頻教程
Flutter Dio源碼分析(三)--深度剖析視頻教程
Flutter Dio源碼分析(四)--封裝視頻教程
github倉(cāng)庫(kù)地址
本文會(huì)手把手教你該怎么去封裝一個(gè)類庫(kù),平時(shí)在我們的工作中都是拿著別人的造好的輪子在使用,這篇文章將帶你怎么去自己造輪子,以后再碰到別的類庫(kù)需要對(duì)其進(jìn)行封裝的時(shí)候提供一個(gè)的思路和方法。
在前面的文章中,我們對(duì) Dio 的基本使用、請(qǐng)求庫(kù)對(duì)比、源碼分析,我們知道 Dio 的使用非常的簡(jiǎn)單,那為什么還需要進(jìn)行封裝呢?有兩點(diǎn)如下:
當(dāng)組件庫(kù)方法發(fā)生重要改變需要遷移的時(shí)候如果有多處地方用到,那么需要對(duì)使用到的每個(gè)文件都進(jìn)行修改,非常的繁瑣而且很容易出問(wèn)題。
當(dāng)不需要 Dio 庫(kù)的時(shí)候,我們可以隨時(shí)方便切換到別的網(wǎng)絡(luò)請(qǐng)求庫(kù),當(dāng)然 Dio 目前內(nèi)置支持使用第三方庫(kù)的適配器。
因?yàn)橐粋€(gè)應(yīng)用程序基本都是統(tǒng)一的配置方式,所以我們可以針對(duì) 攔截器 、 轉(zhuǎn)換器 、 緩存 、 統(tǒng)一處理錯(cuò)誤 、 代理配置 、 證書(shū)校驗(yàn) 等多個(gè)配置進(jìn)行統(tǒng)一管理。
因?yàn)槲覀兊膽?yīng)用程序在每個(gè)頁(yè)面中都會(huì)用到網(wǎng)絡(luò)請(qǐng)求,那么如果我們每次請(qǐng)求的時(shí)候都去實(shí)例化一個(gè) Dio ,無(wú)非是增加了系統(tǒng)不必要的開(kāi)銷,而使用單例模式對(duì)象一旦創(chuàng)建每次訪問(wèn)都是同一個(gè)對(duì)象,不需要再次實(shí)例化該類的對(duì)象。
這是通過(guò)靜態(tài)變量的私有構(gòu)造器來(lái)創(chuàng)建的單例模式
我們對(duì) 超時(shí)時(shí)間 、 響應(yīng)時(shí)間 、 BaseUrl 進(jìn)行統(tǒng)一設(shè)置
因?yàn)椴还苁?get() 還是 post() 請(qǐng)求, Dio 內(nèi)部最終都會(huì)調(diào)用 request 方法,只是傳入的 method 不一樣,所以我們這里定義一個(gè)枚舉類型在一個(gè)方法中進(jìn)行處理
我們已經(jīng)把 Restful API 風(fēng)格簡(jiǎn)化成了一個(gè)方法,通過(guò) DioMethod 來(lái)標(biāo)明不同的請(qǐng)求方式。在我們平時(shí)開(kāi)發(fā)的過(guò)程中,需要在請(qǐng)求前、響應(yīng)前、錯(cuò)誤時(shí)對(duì)某一些接口做特殊的處理,那我們就需要用到攔截器。 Dio 為我們提供了自定義攔截器功能,很容易輕松的實(shí)現(xiàn)對(duì)請(qǐng)求、響應(yīng)、錯(cuò)誤時(shí)進(jìn)行攔截
我們發(fā)現(xiàn)雖然 Dio 框架已經(jīng)封裝了一個(gè) DioError 類庫(kù),但如果需要對(duì)返回的錯(cuò)誤進(jìn)行統(tǒng)一彈窗處理或者路由跳轉(zhuǎn)等就只能自定義了
在我們發(fā)送請(qǐng)求的時(shí)候會(huì)碰到幾種情況,比如需要對(duì)非open開(kāi)頭的接口自動(dòng)加上一些特定的參數(shù),獲取需要在請(qǐng)求頭增加統(tǒng)一的 token
在我們請(qǐng)求接口前可以對(duì)響應(yīng)數(shù)據(jù)進(jìn)行一些基礎(chǔ)的處理,比如對(duì)響應(yīng)的結(jié)果進(jìn)行自定義封裝,還可以針對(duì)單獨(dú)的 url 做特殊處理等。
我們看了轉(zhuǎn)換器的介紹,發(fā)現(xiàn)和攔截器的功能差不多,那為什么還要存在轉(zhuǎn)換器,有兩點(diǎn):
執(zhí)行流程: 請(qǐng)求攔截器 請(qǐng)求轉(zhuǎn)換器 發(fā)起請(qǐng)求 響應(yīng)轉(zhuǎn)換器 響應(yīng)攔截器 最終結(jié)果 。
只會(huì)被用于 'PUT'、 'POST'、 'PATCH'方法,因?yàn)橹挥羞@些方法才可以攜帶請(qǐng)求體(request body)
會(huì)被用于所有請(qǐng)求方法的返回?cái)?shù)據(jù)。
在開(kāi)發(fā)過(guò)程中,客戶端和服務(wù)器打交道的時(shí)候,往往會(huì)用一個(gè) token 來(lái)做校驗(yàn),因?yàn)槊總€(gè)公司處理刷新token的邏輯都不一樣,我這里舉一個(gè)簡(jiǎn)單的例子
為什么我們需要有取消請(qǐng)求的功能,如果當(dāng)我們的頁(yè)面在發(fā)送請(qǐng)求時(shí),用戶主動(dòng)退出當(dāng)前界面或者app應(yīng)用程序退出的時(shí)候數(shù)據(jù)還沒(méi)有響應(yīng),那我們就需要取消該網(wǎng)絡(luò)請(qǐng)求,防止不必要的錯(cuò)誤。
由 服務(wù)器生成 的 一小段文本信息 ,發(fā)送給瀏覽器,瀏覽器把 cookie 以kv形式保存到本地 某個(gè)目錄下的文本文件內(nèi),下一次請(qǐng)求同一網(wǎng)站時(shí)會(huì)把該 cookie 發(fā)送給服務(wù)器。
cookie 的使用需要用到兩個(gè)第三方組件 dio_cookie_manager 和 cookie_jar
因?yàn)樵谖覀兤綍r(shí)的開(kāi)發(fā)過(guò)程中,會(huì)碰到一種情況,在進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),我們希望能正常訪問(wèn)到上次的數(shù)據(jù),對(duì)于用戶的體驗(yàn)比較好,而不是展示一個(gè)空白的頁(yè)面,該緩存主要是 《Flutter實(shí)戰(zhàn)》網(wǎng)絡(luò)接口緩存 提供參考。
我們?cè)诔绦蛲顺龊髢?nèi)存緩存將會(huì)消失,所以我們用 shared_preferences 進(jìn)行磁盤(pán)緩存數(shù)據(jù)。
在我們用flutter進(jìn)行抓包的時(shí)候需要配置 Dio 代理。由 DefaultHttpClientAdapter 提供了一個(gè) onHttpClientCreate 回調(diào)來(lái)設(shè)置底層 HttpClient 的代理。
用于驗(yàn)證正在訪問(wèn)的網(wǎng)站是否真實(shí)。提供安全性,因?yàn)樽C書(shū)和域名綁定,并且由根證書(shū)機(jī)構(gòu)簽名確認(rèn)。
日志打印主要是幫助我們開(kāi)發(fā)時(shí)進(jìn)行輔助排錯(cuò)