ios双录系统服务器地址,iOS中的URL

1. 网络通信中的URL

我们使用这种url来向服务器请求或传递数据,俗称 "网络资源定位符"

URL的结构

387c3c6b04b9

URL结构图

protocol/scheme: 传输协议,比如http、https等

credentials(可选):一些http服务器支持通过url来校验用户信息,当然这是一种不普遍也不安全的方式

hostName:资源服务器的主机地址

port(可选):端口号,指定客户端应该连接哪个端口,如果忽略则使用默认端口。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项

path:绝对路径,由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

query(可选):查询,url最后部分是查询字符串。这个值是从path用?隔开的。多个参数每个参数用&分隔。查询字符串不能包含回车空格换行字符

fragment:信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释

URL的拆分

我们已经知道一个URL的基本结构,那么在iOS中我们如何获取对应结构的元素呢,答案是利用系统的URLComponents 类进行处理

我们简单看下这个类的内部结构

几个初始化方法

public init?(url: URL, resolvingAgainstBaseURL resolve: Bool)

public init?(url: URL, resolvingAgainstBaseURL resolve: Bool)....

属性

public var scheme: String?

public var user: String?

public var password: String?

public var host: String?

public var port: Int?

public var path: String

public var query: String?

public var fragment: String?

public var queryItems: [URLQueryItem]?

我们可以看到URL的每个结构在URLComponents中都有对应的属性

举个栗子:

guard let urlComponents = URLComponents.init(string: "http://mobile.hktsc.cc/services/list?appPage=serviceList&brandId=1") else {

return

}

if let scheme = urlComponents.scheme {

print("scheme: \(scheme)")

}

if let user = urlComponents.user {

print("user: \(user)")

}

if let password = urlComponents.password {

print("password: \(password)")

}

if let host = urlComponents.host {

print("host: \(host)")

}

if let port = urlComponents.port {

print("port: \(port)")

}

print("path: \(urlComponents.path)")

if let query = urlComponents.query {

print("query: \(query)")

}

if let queryItems = urlComponents.queryItems {

print("queryItems: \(queryItems)")

for (index, queryItem) in queryItems.enumerated() {

print("第\(index)个queryItem name:\(queryItem.name)")

if let value = queryItem.value {

print("第\(index)个queryItem value:\(value)")

}

}

}

输出结果

scheme: http

host: mobile.hktsc.cc

path: /services/list

query: appPage=serviceList&brandId=1

queryItems: [appPage=serviceList, brandId=1]

第0个queryItem name:appPage

第0个queryItem value:serviceList

第1个queryItem name:brandId

第1个queryItem value:1

使用场景

常用的使用场景是URL参数的截取,或者根据url的不同进行一些不同的操作,比如跳转等等

2. openURL

openURL主要有下面几个主要的应用

应用间的跳转:

在iOS中我们可以通过URL Schemes + openURL方法实现应用间的跳转,下面先讲几个概念和方法

URL Schemes:我们在工程中配置的 URL Schemes可以理解为我们App在手机上的一个地址(类比网络中的URL,比如http),其他的已安装的应用可以通过这个地址找到我们的App,实现跳转。当然这个URL Schemes可以有多个

387c3c6b04b9

URL Schemes

如图,使我们经常会添加的几个URL Schemes,目的是为了第三方应用能够跳转回我们的App。

在iOS9之后,新增了 URL Schemes白名单的概念,这个稍后具体再讲

openURL: 我们可以通过这个方法打开一个URL,假如我们这个URL的schemes和我们已安装的某个app的URL Schemes一样的话,我们就可以打开这个app。

比如你可以使用下面的方法直接跳转到微信

UIApplication.shared.openURL(URL(string: "weixin://")!)// iOS10之前

UIApplication.shared.open(URL(string: "weixin://")!, options: [:], completionHandler: nil) // iOS10

再或者我们常用的拨打电话

UIApplication.shared.openURL(URL(string: "tel://10086")!)

一般,我们在跳转之前都需要判断下能不能够打开这个url(能够打开则跳转,不能则提示或者隐藏什么的),系统为我们提供了canOpenURL这个方法来判断我们是否能够打开某个url.但是在iOS9之后,我们需要在info.plist中配置URL Schemes 白名单,只有添加了白名单,我们的这个方法才能生效。否则会提示"This app is not allowed to query for scheme",如下图

387c3c6b04b9

白名单

值得一提的是在iOS9之后当我们跳转进入其他App时,系统会在左上角默认提供一个反馈按钮

387c3c6b04b9

默认返回按钮

其实,我们在跳转时还能进行简单的App间传参

如何传参:

类比于网络中的url,我们open的url其实也是这种结构,url中的scheme决定了我们要跳转的位置,其他的结构则可以用来传递我们的参数。

**举个栗子: **

我们使用第三方地图软件来进行导航时,在跳转时就需要将我们的目标位置参数传递过去

来看下官方提供的url格式

iosamap://navi?sourceApplication=applicationName&backScheme=applicationScheme&poiname=fangheng&poiid=BGVIS&lat=36.547901&lon=104.258354&dev=1&style=2

iosamap:高德地图的官方url scheme,确保能跳到高德地图

navi: url中的host,这边表示服务类型为导航

sourceApplication,backScheme及后面的:这部分为url中query,我们需要传递的具体的参数

通过这个url我们可以直接从我们App跳到高德地图导航页面进行导航,当然前提是我们已经安装了高德地图,可以使用canOpenUrl来判断,具体的可参考高德官方的文档

那么高德内部是如何接收我们的参数的呢?,来看这两个熟悉的回调方法

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool

以上两个方法是系统提供给我们的openUrl回调方法,比如我们跳转到高德地图后,他那边就会执行这个方法,有一点需要注意的是第二个方法是在iOS9才出现的方法,也就是说如果你的系统是iOS9及之后的话他只会走第二个方法,iOS9之前才会走第一个方法。我们可以在这里获取相应的url并进行处理。我们平时会在这边处理友盟分享和支付相关的一些回调

3. 本地文件的访问

url也可以用来访问我们本地的资源文件,其实和网络中的url一样,只不过资源服务器变成了我们本机,少去了资源传递的过程,最直接的资源定位符,这一块就先不做详细叙述了

以上

后续有URL相关的知识会在下面补充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与国已互相成为双方最大的交易伙伴。国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占国外贸总值的15.4%。在过去20余年,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值