做微信和支付宝支付的时候,好奇是如何在app内能指定打开哪个app的,以及如何做信息传递的?
好奇设置的 URL schemes 是干什么用的?
一. 什么叫 URL Scheme?
-
URL
http://www.baidu.com
我们都知道是一个链接或者网址。 Schemes 就相当于http://www.baidu.com
中的最初位置,即://
之前的那段字符。比如http://www.baidu.com
这个网址的Schemes是http
。 -
iOS有个特性就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme用于从浏览器或其他应用中启动本应用。常见的分享和支付到第三方之间的跳转都是基于Scheme的。
-
在以本地应用为主的 iOS 上,我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该这个应用的URL 的 Schemes 部分,也就是开头儿那部分。比如
短信 sms://
电话 Phone: tel://
邮箱 Mail: message://
日历 Calendar: calshow://
地图 Maps: maps://
iTunes Store: itms://
App Store: itms-apps://
iBooks: ibooks://
Game Center: gamecenter://
二. 项目中的配置描述
- 两个项目A和B。A项目是动作发出者,B项目是动作接受者。也就是说在A项目中唤起B项目。
- B项目的配置

-
A项目中配置
添加 LSApplicationQueriesSchemes
- A项目中唤起B项目的操作
let str = "achao://hello"
let url = URL.init(string: str)
if UIApplication.shared.canOpenURL(url!) {
UIApplication.shared.openURL(url!)
} else {
print("不可以打开")
}
三. 注意点
1.模拟器 拉不起来 要用 真机
- -canOpenURL: failed for URL: “xxx://” - error: “This app is not allowed to query for scheme xxx”
的原因是没设置LSApplicationQueriesSchemes
网友评论