最近公司客服一直反映iOS 好多用戶安裝完,服務(wù)項目顯示不出來,沒辦法下單。一直認(rèn)為是用戶網(wǎng)不好,讓他們刷新一下或者退出APP重新進(jìn)。隨著反饋的問題越來越多,我覺得肯定是有存在問題的,就思考怎么解決數(shù)據(jù)加載失敗的顯示,好引導(dǎo)用戶操作。后來發(fā)現(xiàn)在iOS 10 系統(tǒng)首次安裝時蘋果會提示'允許xx使用數(shù)據(jù)'的提示。當(dāng)手機點擊允許時,會發(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)限進(jìn)行選擇。
那么這個系統(tǒng)的新功能會為用戶帶來哪些問題呢?問題主要在于,用戶點擊“允許”之前,所有網(wǎng)絡(luò)請求都是被禁止的。具體有兩種表現(xiàn):
1、少部分用戶根本不顯示彈框,所以網(wǎng)絡(luò)請求一直被禁止。不幸的是,蘋果這個功能可能出得太倉促,并沒有給開發(fā)者提供相應(yīng)的 API。所以,我們沒辦法檢測到用戶點擊“允許”或“不允許”網(wǎng)絡(luò)請求的回調(diào),也沒法檢測到當(dāng)前用戶是否授權(quán)的狀態(tài)。只能通過一些特殊處理,來盡量減小對用戶的影響。針對這部分用戶,只能通過客服引導(dǎo)。
解決辦法:在「設(shè)置 - 蜂窩移動網(wǎng)絡(luò)」內(nèi)打開「無線局域網(wǎng)助理」開關(guān),再進(jìn)入無法聯(lián)網(wǎng)的 App,會彈出提示框。解決之后,就可以關(guān)掉助理開關(guān)。
2、對于絕大部分用戶,彈框會正確顯示;然而從 app 啟動到用戶點擊“允許”需要一段時間,在這段時間內(nèi)發(fā)出的網(wǎng)絡(luò)請求全都會直接失敗,導(dǎo)致空白界面。
解決辦法:
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)限,因此只給了用戶提示,并沒有引導(dǎo)用戶跳轉(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)在引導(dǎo)頁結(jié)束后開始請求,此時用戶已經(jīng)同意開啟數(shù)據(jù)訪問權(quán)限,數(shù)據(jù)可以訪問成功,也可以解決問題。
出現(xiàn)的問題:
我用的是監(jiān)聽網(wǎng)絡(luò)狀況,但是Block會調(diào)用兩次,所以未聯(lián)網(wǎng)提示會彈兩次,沒有查找出問題根源,暫時做一下記錄。有了解的希望給我回復(fù)。
借鑒文章:http://www.lxweimin.com/p/a2af8e3dcaa3
http://www.cocoachina.com/ios/20161206/18304.html