優(yōu)雅的處理國行iOS10新增網(wǎng)絡請求權限問題

國行iPhone在iOS10后應工信部要求新增加網(wǎng)絡請求權限,這是國行手機獨有的權限,用戶在第一次安裝APP時會提示用戶是否允許APP使用網(wǎng)絡權限;
如果APP在授權期間請求網(wǎng)絡的話會請求失敗,不幸的是Apple并未提供具體的API供開發(fā)者處理授權期間的網(wǎng)路請求;
這就導致用戶在第一次安裝后授權結束后可能會出現(xiàn)很多依賴于didFinishLaunchingWithOptions的操作初始化失敗,比如首頁網(wǎng)絡請求、SDK初始化失敗等;

本文提供一種我覺得合適的處理方式:網(wǎng)絡狀態(tài)變更通知

大體思路是通過Reachability來監(jiān)聽APP的網(wǎng)絡狀態(tài),在網(wǎng)絡可用時及時reconnect
框架:Reachability
//網(wǎng)絡狀態(tài)監(jiān)控
    func setUpNetworkNoti() {
        
        /// 2、實時監(jiān)聽網(wǎng)絡鏈接狀態(tài)
        hostReachability?.whenReachable = { reachability in
            NotificationCenter.default.post(name: NSNotification.Name.connected, object: nil)
            if reachability.connection == .wifi {
                /// TODO……
                guard let lastStatus = UserDefaults.standard.value(forKey: kNetworkStatus) else {
                    return
                }
                if !(lastStatus as! Bool) {
                    UserDefaults.standard.set(true, forKey: kNetworkStatus)
                    NotificationCenter.default.post(name: NSNotification.Name.connected, object: nil)
                }
                
            } else if reachability.connection == .cellular  {
                /// TODO……
                guard let lastStatus = UserDefaults.standard.value(forKey: kNetworkStatus) else {
                    return
                }
                if !(lastStatus as! Bool) {
                    UserDefaults.standard.set(true, forKey: kNetworkStatus)
                    NotificationCenter.default.post(name: NSNotification.Name.connected, object: nil)
                }
                
            } else {
                UserDefaults.standard.set(false, forKey: kNetworkStatus)
                NotificationCenter.default.post(name: NSNotification.Name.unreachable, object: nil)
                /// TODO……
                
            }
        }
        hostReachability?.whenUnreachable = { _ in
            UserDefaults.standard.set(false, forKey: kNetworkStatus)
            NotificationCenter.default.post(name: NSNotification.Name.unreachable, object: nil)
            /// TODO……
            
        }
        
        do {
            try hostReachability?.startNotifier()
        } catch {
            /// print("Unable to start notifier")
        }
    }

當網(wǎng)絡通暢時會執(zhí)行hostReachability?.whenReachable閉包,可以在didFinishLaunchingWithOptions中將需要初始化的操作或者網(wǎng)絡請求放在whenReachable閉包中;

切記:whenReachable閉包在網(wǎng)絡通暢時didFinishLaunchingWithOptions執(zhí)行時并不會執(zhí)行,只有在網(wǎng)絡變化時才會執(zhí)行,所以,需要在閉包外部同樣執(zhí)行初始化操作或者網(wǎng)絡請求

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,689評論 1 32
  • AFHTTPRequestOperationManager 網(wǎng)絡傳輸協(xié)議UDP、TCP、Http、Socket、X...
    Carden閱讀 5,346評論 0 12
  • 四個月過去了 - 時間過得很快,這段時間里。蘇喬去了許多的地方,除了隔三差五的跟家人簡單報個平安外。蘇喬沒有與...
    無珩公子閱讀 459評論 0 1
  • 這里是憂藍雪的小怪屋,發(fā)布第二期文章,希望各位斧正。 讀一本小說,應把自己放這在小說中做旁觀者去讀,還是把主人公的...
    憂藍雪閱讀 256評論 0 1
  • 文/羽蒙 我站在峰巒之間仰望情絲游走天地間多少次撥動指針尋覓著 那誓言 我站在波瀾之間滄海一粟的誓言凡心如初...
    羽蒙1閱讀 306評論 6 11

友情鏈接更多精彩內容