最近公司客服一直反映iOS 好多用戶安裝完绑洛,服務(wù)項目顯示不出來狂丝,沒辦法下單换淆。一直認為是用戶網(wǎng)不好,讓他們刷新一下或者退出APP重新進几颜。隨著反饋的問題越來越多倍试,我覺得肯定是有存在問題的,就思考怎么解決數(shù)據(jù)加載失敗的顯示蛋哭,好引導用戶操作县习。后來發(fā)現(xiàn)在iOS 10 系統(tǒng)首次安裝時蘋果會提示'允許xx使用數(shù)據(jù)'的提示。當手機點擊允許時,會發(fā)現(xiàn)首頁的數(shù)據(jù)訪問不到,會出現(xiàn)空白界面.這個問題只有在國行的蘋果手機并且在iOS10 以上的機型里會出現(xiàn).
淵源:
查了相關(guān)文章知道由于大陸工信部出臺的新規(guī)定指出,應(yīng)用在未經(jīng)用戶允許的前提下躁愿,系統(tǒng)不能授予其使用聯(lián)網(wǎng)的功能叛本。Apple 在 iOS 10操作系統(tǒng)中加入了關(guān)于應(yīng)用使用數(shù)據(jù)的授權(quán)彈窗提示,用戶在 iOS 10 系統(tǒng)中第一次打開應(yīng)用時彤钟,會被要求對于是否授予應(yīng)用聯(lián)網(wǎng)權(quán)限進行選擇来候。
那么這個系統(tǒng)的新功能會為用戶帶來哪些問題呢?問題主要在于样勃,用戶點擊“允許”之前吠勘,所有網(wǎng)絡(luò)請求都是被禁止的。具體有兩種表現(xiàn):
1峡眶、少部分用戶根本不顯示彈框剧防,所以網(wǎng)絡(luò)請求一直被禁止。不幸的是辫樱,蘋果這個功能可能出得太倉促峭拘,并沒有給開發(fā)者提供相應(yīng)的 API。所以狮暑,我們沒辦法檢測到用戶點擊“允許”或“不允許”網(wǎng)絡(luò)請求的回調(diào)鸡挠,也沒法檢測到當前用戶是否授權(quán)的狀態(tài)。只能通過一些特殊處理搬男,來盡量減小對用戶的影響拣展。針對這部分用戶,只能通過客服引導缔逛。
解決辦法:在「設(shè)置 - 蜂窩移動網(wǎng)絡(luò)」內(nèi)打開「無線局域網(wǎng)助理」開關(guān)备埃,再進入無法聯(lián)網(wǎng)的 App,會彈出提示框褐奴。解決之后按脚,就可以關(guān)掉助理開關(guān)。
2敦冬、對于絕大部分用戶辅搬,彈框會正確顯示;然而從 app 啟動到用戶點擊“允許”需要一段時間脖旱,在這段時間內(nèi)發(fā)出的網(wǎng)絡(luò)請求全都會直接失敗堪遂,導致空白界面。
解決辦法:
1)監(jiān)聽網(wǎng)絡(luò)狀態(tài)萌庆,在用戶允許數(shù)據(jù)請求后溶褪,加載數(shù)據(jù)。因為該方法監(jiān)聽的網(wǎng)絡(luò)狀態(tài)踊兜,不能區(qū)分手機 是沒有聯(lián)網(wǎng) or 用戶沒有允許聯(lián)網(wǎng)權(quán)限,因此只給了用戶提示佳恬,并沒有引導用戶跳轉(zhuǎn)設(shè)置捏境。若有好的解決方案于游,歡迎告知。
做法:采用AFN的Reachability
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager startMonitoring];//開始監(jiān)聽
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == AFNetworkReachabilityStatusUnknown||status ==
AFNetworkReachabilityStatusNotReachable) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示"
message:@"您的網(wǎng)絡(luò)好像不太給力,請檢查 系統(tǒng)-設(shè)置 是否開啟蜂窩數(shù)據(jù)或者無
線局域網(wǎng)" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"確定", nil];
[alert show];
}else if (status==AFNetworkReachabilityStatusReachableViaWWAN||status==AFNetworkReachabilityStatusReachableViaWiFi){
//請求數(shù)據(jù)
}
}];
2)允許用戶手動重新請求垫言。出現(xiàn)數(shù)據(jù)空白時贰剥,如果在空白頁面上有“重新加載”的按鈕,也可以讓用戶體驗好一些筷频。
3)在引導頁結(jié)束后開始請求蚌成,此時用戶已經(jīng)同意開啟數(shù)據(jù)訪問權(quán)限,數(shù)據(jù)可以訪問成功凛捏,也可以解決問題担忧。
出現(xiàn)的問題:
我用的是監(jiān)聽網(wǎng)絡(luò)狀況,但是Block會調(diào)用兩次坯癣,所以未聯(lián)網(wǎng)提示會彈兩次瓶盛,沒有查找出問題根源,暫時做一下記錄示罗。有了解的希望給我回復惩猫。
借鑒文章:http://www.reibang.com/p/a2af8e3dcaa3
http://www.cocoachina.com/ios/20161206/18304.html