bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

ios中DeepLinking怎么用-創新互聯

這篇文章將為大家詳細講解有關ios中Deep Linking怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站建設、成都網站設計、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的寶雞網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

在 iOS 中,deep linking 實際上包括 URL Scheme、Universal Link、notification 或者 3D Touch 等 URL 跳轉方式。應用場景比如常見的通知,社交分享,支付,或者在 webView 中點擊特定鏈接在 app 中打開并跳轉到對應的原生頁面。

用的最多也是最常用的是通過 Custom URL Scheme 來實現 deep linking。在 application:openURL:sourceApplication:annotation 或者 iOS9 之后引入的 application:openURL:options 中,通過對 URL 進行處理來執行相應的業務邏輯。一般地簡單地通過字符串比較就可以了。但如果 URL 跳轉的對應場景比較多,開發維護起來就不那么簡單了。對此的最佳實踐是引入 router 來統一可能存在的所有入口。

這里介紹的一種使用 router 來組織入口的方法是來自與 kickstarter-ios 這個開源項目,是純 swift 開發的,而且在 talk.objc.io 上有開發者的視頻分享。

在工程,通過定于 Navigation enum,把所有支持通過 URL 跳轉的 entry point 都定義成一個 case。

public enum Navigation {
 case checkout(Int, Navigation.Checkout)
 case messages(messageThreadId: Int)
 case tab(Tab)
 ...
}

在 allRoutes 字典中列出了所有的 URL 模板,以及與之對應的解析函數。

private let allRoutes: [String: (RouteParams) -> Decode<Navigation>] = [
 "/mpss/:a/:b/:c/:d/:e/:f/:g": emailLink,
 "/checkouts/:checkout_param/payments": paymentsRoot,
 "/discover/categories/:category_id": discovery,
 "/projects/:creator_param/:project_param/comments": projectComments,
  ...
]

在 match(_ url: URL) -> Navigation 函數中通過遍歷 allRoutes,去匹配傳入的 url。具體過程是:在 match 函數內,調用 parsedParams(_ url: URL, fromTemplate: template: String) -> [String: RouteParams] 函數,將分割后 template 字符串作 key,取出 url 中的對應的 value,并組裝成 [String: RouteParams] 字典返回。最后將返回的字典 flatmap(route),即傳入對應的解析函數,最終得到 Navigation 返回

public static func match(_ url: URL) -> Navigation? {
  return allRoutes.reduce(nil) { accum, templateAndRoute in
   let (template, route) = templateAndRoute
   return accum ?? parsedParams(url: url, fromTemplate: template).flatMap(route)?.value
  }
 }
private func parsedParams(url: URL, fromTemplate template: String) -> RouteParams? {
 ...
 let templateComponents = template
  .components(separatedBy: "/")
  .filter { $0 != "" }
 let urlComponents = url
  .path
  .components(separatedBy: "/")
  .filter { $0 != "" && !$0.hasPrefix("?") }
 guard templateComponents.count == urlComponents.count else { return nil }

 var params: [String: String] = [:]
 for (templateComponent, urlComponent) in zip(templateComponents, urlComponents) {
  if templateComponent.hasPrefix(":") {
   // matched a token
   let paramName = String(templateComponent.characters.dropFirst())
   params[paramName] = urlComponent
  } else if templateComponent != urlComponent {
   return nil
  }
 }
 URLComponents(url: url, resolvingAgainstBaseURL: false)?
  .queryItems?
  .forEach { item in
   params[item.name] = item.value
 }
 var object: [String: RouteParams] = [:]
 params.forEach { key, value in
  object[key] = .string(value)
 }
 return .object(object)
}

通過 Navigation enum,把一個 deep link 方式傳入的 URL,解析成一個 Navigation 的 case,使得代碼具有了很高的可讀性,非常清晰明了。

關于“ios中Deep Linking怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

另外有需要云服務器可以了解下創新互聯建站vcdvsql.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

標題名稱:ios中DeepLinking怎么用-創新互聯
分享URL:http://vcdvsql.cn/article8/ddhiop.html

成都網站建設公司_創新互聯,為您提供軟件開發用戶體驗、網站收錄、企業網站制作、電子商務、App開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設