react-native ios 集成httpdns

react-native 項(xiàng)目 iOS端集成httpdns

集成步驟

  • 手動(dòng)集成
    • 下載SDK,將組建包拖入項(xiàng)目中
      AlicloudHttpDNS.framework
      AlicloudUtils.framework
      UTDID.framework
    • 添加系統(tǒng)庫(kù)
      libresolv.tbd
      CoreTelephony.framework
      SystemConfiguration.framework
  • Pod集成
    • 指定Master倉(cāng)庫(kù)和阿里云倉(cāng)庫(kù):
      source 'https://github.com/CocoaPods/Specs.git'
      source 'https://github.com/aliyun/aliyun-specs.git'
    • 添加依賴:
      pod 'AlicloudHTTPDNS', '~> 1.5.2'
  • 修改編譯選項(xiàng)
    • Target->Build Setting->Linking->Other Linker Flags中添加 -ObjC 選項(xiàng)蛾娶。

原生入口基本配置

  • AppDelegate 入口處添加如下配置代碼
/** httpdns */
  // 初始化HTTPDNS
  // 設(shè)置AccoutID
  HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:xxxxx];
  //鑒權(quán)方式初始化
  //HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:0000 secretKey:@"XXXX"];
  
  // 為HTTPDNS服務(wù)設(shè)置降級(jí)機(jī)制
//  [httpdns setDelegateForDegradationFilter:self];
  // 允許返回過期的IP
  [httpdns setExpiredIPEnabled:YES];
  // 打開HTTPDNS Log灯谣,線上建議關(guān)閉
  [httpdns setLogEnabled:YES];
  /*
   *  設(shè)置HTTPDNS域名解析請(qǐng)求類型(HTTP/HTTPS),若不調(diào)用該接口蛔琅,默認(rèn)為HTTP請(qǐng)求胎许;
   *  SDK內(nèi)部HTTP請(qǐng)求基于CFNetwork實(shí)現(xiàn),不受ATS限制。
   */
  //[httpdns setHTTPSRequestEnabled:YES];
  // edited
  NSArray *preResolveHosts = @[ @"www.xxx.cn", @"www.xxx.cn"];
  // NSArray* preResolveHosts = @[@"pic1cdn.igetget.com"];
  // 設(shè)置預(yù)解析域名列表
  [httpdns setPreResolveHosts:preResolveHosts];
  • 如果需要降級(jí)機(jī)制實(shí)現(xiàn)需要遵循HttpDNSDegradationDelegate協(xié)議實(shí)現(xiàn)下面的代理方法
/*
 * 降級(jí)過濾器辜窑,您可以自己定義HTTPDNS降級(jí)機(jī)制
 */
- (BOOL)shouldDegradeHTTPDNS:(NSString *)hostName {
    NSLog(@"Enters Degradation filter.");
    // 根據(jù)HTTPDNS使用說明钩述,存在網(wǎng)絡(luò)代理情況下需降級(jí)為L(zhǎng)ocal DNS
    if ([NetworkManager configureProxies]) {
        NSLog(@"Proxy was set. Degrade!");
        return YES;
    }
    
    // 假設(shè)您禁止"www.taobao.com"域名通過HTTPDNS進(jìn)行解析
    if ([hostName isEqualToString:@"www.taobao.com"]) {
        NSLog(@"The host is in blacklist. Degrade!");
        return YES;
    }
    
    return NO;
}

修改react-native 網(wǎng)絡(luò)請(qǐng)求庫(kù)

WechatIMG52.jpeg
  • 首先根據(jù)上圖步驟進(jìn)行到第四步,添加一個(gè)路徑$(SRCROOT)/../../../../ios(否則無法再Libraries下的依賴庫(kù)下訪問主項(xiàng)目中剛剛添加的SDK)
  • 進(jìn)入標(biāo)記5中RCTHTTPRequestHandler.mm文件
    • 首先引入#import <AlicloudHttpDNS/AlicloudHttpDNS.h>上述步驟路徑如果配置錯(cuò)誤穆碎,這里將會(huì)報(bào)文件找不到的錯(cuò)誤
    • 實(shí)現(xiàn)一個(gè)NSMutableURLRequest屬性用來保存發(fā)送的request
      @property (nonatomic, strong) NSMutableURLRequest *request;
    • 在數(shù)據(jù)發(fā)起request請(qǐng)求方法中(- (NSURLSessionDataTask *)sendRequest:(NSURLRequest *)request withDelegate:(id<RCTURLRequestDelegate>)delegate)獲取IP并替換
    • 由于ios目前都是https請(qǐng)求牙勘,所以進(jìn)行一步攔截證書的操作,遵循NSURLSessionTaskDelegate協(xié)議并實(shí)現(xiàn)下面的代理方法
#pragma mark - NSURLSessionTaskDelegate
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *_Nullable))completionHandler {
  if (!challenge) {
    return;
  }
  NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling;
  NSURLCredential *credential = nil;
  /*
   * 獲取原始域名信息所禀。
   */
  NSString *host = [[self.request allHTTPHeaderFields] objectForKey:@"host"];
  if (!host) {
    host = self.request.URL.host;
  }
  if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
    if ([self evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:host]) {
      disposition = NSURLSessionAuthChallengeUseCredential;
      credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
    } else {
      disposition = NSURLSessionAuthChallengePerformDefaultHandling;
    }
  } else {
    disposition = NSURLSessionAuthChallengePerformDefaultHandling;
  }
  // 對(duì)于其他的challenges直接使用默認(rèn)的驗(yàn)證方案
  completionHandler(disposition, credential);
}
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
                  forDomain:(NSString *)domain {
  /*
   * 創(chuàng)建證書校驗(yàn)策略
   */
  NSMutableArray *policies = [NSMutableArray array];
  if (domain) {
    [policies addObject:(__bridge_transfer id) SecPolicyCreateSSL(true, (__bridge CFStringRef) domain)];
  } else {
    [policies addObject:(__bridge_transfer id) SecPolicyCreateBasicX509()];
  }
  /*
   * 綁定校驗(yàn)策略到服務(wù)端的證書上
   */
  SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef) policies);
  /*
   * 評(píng)估當(dāng)前serverTrust是否可信任方面,
   * 官方建議在result = kSecTrustResultUnspecified 或 kSecTrustResultProceed
   * 的情況下serverTrust可以被驗(yàn)證通過,https://developer.apple.com/library/ios/technotes/tn2232/_index.html
   * 關(guān)于SecTrustResultType的詳細(xì)信息請(qǐng)參考SecTrust.h
   */
  SecTrustResultType result;
  SecTrustEvaluate(serverTrust, &result);
  return (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed);
}
  • 大功告成北秽,附上這段代碼的截圖

  • WechatIMG53.jpeg
  • WechatIMG54.jpeg
  • WechatIMG55.jpeg
  • WechatIMG56.jpeg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末葡幸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贺氓,更是在濱河造成了極大的恐慌蔚叨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辙培,死亡現(xiàn)場(chǎng)離奇詭異蔑水,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扬蕊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門搀别,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尾抑,你說我怎么就攤上這事歇父。” “怎么了再愈?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵榜苫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我翎冲,道長(zhǎng)垂睬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任抗悍,我火速辦了婚禮驹饺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缴渊。我一直安慰自己赏壹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布衔沼。 她就那樣靜靜地躺著蝌借,像睡著了一般田柔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骨望,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音欣舵,去河邊找鬼擎鸠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缘圈,可吹牛的內(nèi)容都是我干的劣光。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼糟把,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绢涡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遣疯,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤雄可,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后缠犀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體数苫,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年辨液,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虐急。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滔迈,死狀恐怖止吁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燎悍,我是刑警寧澤敬惦,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站间涵,受9級(jí)特大地震影響仁热,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勾哩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一抗蠢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧思劳,春花似錦迅矛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)壶硅。三九已至,卻和暖如春销斟,著一層夾襖步出監(jiān)牢的瞬間庐椒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工蚂踊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留约谈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓犁钟,卻偏偏與公主長(zhǎng)得像棱诱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涝动,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一個(gè)家庭里面醋粟,如果母親好靡菇、父親不好,孩子不太受影響昔穴;但是父親好镰官、母親不好,孩子就容易變壞吗货。所以泳唠,媽媽,您真的很重要...
    百安育兒閱讀 418評(píng)論 0 1
  • 文/齊齊樂 -01- 小葉是我的MBA同學(xué)脖母,我們公司離得很近,經(jīng)常晚上下班后一起去上課闲孤。 去年年底谆级,她告訴我,她辭...
    齊齊樂閱讀 727評(píng)論 5 14
  • 你還記得嗎讼积,我們是怎么認(rèn)識(shí)的肥照?記憶應(yīng)該有些模糊了吧。其實(shí)很正常勤众,我的記性也不好舆绎。忘記在哪里看到,說那些真正記憶里超...
    CodyYang閱讀 220評(píng)論 0 0
  • 晨光熹微誕于紫金山頭 她拼勁全力掙脫昨日的枷鎖 看雪山枝頭料峭容顏改 寂寞讓她幻化成熾烈的魔 枷鎖鎖得住身鎖不住心...
    蘭風(fēng)蕙露閱讀 172評(píng)論 1 2
  • 教你如何快速背下《弟子規(guī)》 《弟子規(guī)》比較長(zhǎng)们颜,每3個(gè)字一句吕朵,共360句猎醇,合計(jì)1080字,類似歌謠努溃,但是即使是歌謠硫嘶,...
    賽德傳播閱讀 27,178評(píng)論 0 0