Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)
作者:hangge | 2016-06-12 11:20
(本文代码已升级至Swift3)
我之前写过一篇文章:Swift - URL schemes的使用样例(如:在Safari中打开App)。介绍通过自定义的 URL Scheme,实现从外部浏览器或外部应用打开我们的应用。
同样的,如果想从本地应用中跳转到其他的第三方应用并传值。同样是通过 URL Scheme 实现。
常用的第三方应用都定义了不同的 URL Scheme,我们通过 UIApplication.shared.open() 方法打开相应的链接,即可跳转到对应的 App 中。(iOS10 以下的系统则是使用 UIApplication.shared.openURL() 方法)
1,打开淘宝
下面样例点击按钮后,会自动跳转到淘宝App中。由于我们还传递了一个商品链接参数,那么跳转过来后就会自动打开该商品页面。
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction func click(_ sender: AnyObject) { let urlString = "taobao://item.taobao.com/item.htm?id=22671596473" if let url = URL(string: urlString) { //根据iOS系统版本,分别处理 if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: { (success) in }) } else { UIApplication.shared.openURL(url) } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
下面样例点击按钮后,会自动跳转到百度地图App中。由于我们还传递了地址作为参数,那么跳转过来后就会自动定位到该位置。
(注意:由于参数中带有中文,我们这里使用 addingPercentEncoding 方法对其转义一下。)
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction func click(_ sender: AnyObject) { let urlStr = "baidumap://map/geocoder?address=北京市海淀区上地信息路9号奎科科技大厦" let encodeUrlString = urlStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) if let url = URL(string: encodeUrlString!) { //根据iOS系统版本,分别处理 if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: { (success) in }) } else { UIApplication.shared.openURL(url) } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
3,打开微信扫一扫
下面样例点击按钮后,会自动跳转到微信App中。同时自动打开扫一扫界面。
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction func click(_ sender: AnyObject) { let urlString = "weixin://scanqrcode" if let url = URL(string: urlString) { //根据iOS系统版本,分别处理 if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: { (success) in }) } else { UIApplication.shared.openURL(url) } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
二,常见应用的URL Scheme
1,系统默认应用名称 | URL Scheme | Bundle identifier |
Safari | http:// | |
maps | http://maps.google.com | |
Phone | tel:// | |
SMS | sms:// | |
mailto:// | ||
iBooks | ibooks:// | |
App Store | itms-apps://itunes.apple.com | |
Music | music:// | |
Videos | videos:// |
名称 | URL Scheme | Bundle identifier |
mqq:// | ||
微信 | weixin:// | |
腾讯微博 | TencentWeibo:// | |
淘宝 | taobao:// | |
支付宝 | alipay:// | |
微博 | sinaweibo:// | |
weico微博 | weico:// | |
QQ浏览器 | mqqbrowser:// | com.tencent.mttlite |
uc浏览器 | ucbrowser:// | com.ucweb.iphone.uc com.ucweb.iphone.lowversion |
海豚浏览器 | dolphin:// | com.dolphin.browser.iphone.chinese |
欧朋浏览器 | ohttp:// | com.oupeng.mini |
搜狗浏览器 | SogouMSE:// | com.sogou.SogouExplorerMobile |
百度地图 | baidumap:// | com.baidu.map |
Chrome | googlechrome:// | |
优酷 | youku:// | |
京东 | openapp.jdmoble:// | |
人人 | renren:// | |
美团 | imeituan:// | |
1号店 | wccbyihaodian:// | |
我查查 | wcc:// | |
有道词典 | yddictproapp:// | |
知乎 | zhihu:// | |
点评 | dianping:// | |
微盘 | sinavdisk:// | |
豆瓣fm | doubanradio:// | |
网易公开课 | ntesopen:// | |
名片全能王 | camcard:// | |
QQ音乐 | qqmusic:// | |
腾讯视频 | tenvideo:// | |
豆瓣电影 | doubanmovie:// | |
网易云音乐 | orpheus:// | |
网易新闻 | newsapp:// | |
网易应用 | apper:// | |
网易彩票 | ntescaipiao:// | |
有道云笔记 | youdaonote:// | |
多看 | duokan-reader:// | |
全国空气质量指数 | dirtybeijing:// | |
百度音乐 | baidumusic:// | |
下厨房 | xcfapp:// |
全部评论(8)
uc浏览器那个错了,后面给的是海豚浏览器的 URL scheme
站长回复:多谢你的提醒,现已修正。
UIApplication.shared.openURL(url!)这个方法被废弃了!
站长回复:多谢提醒,文章代码现已更新。
可以知道微信扫一扫的url么
站长回复:文章已更新扫一扫相关的URL Scheme,你可以再看下。
怎么知道别人的程序会响应什么参数
站长回复:这个你就要去看看那些应用的API页面了,如果开放出来的话,他们开发页面上面都会有写的。
为啥没有分享呢
站长回复:你指的是什么分享?
站长,您好,您写的这个太好了,对我帮助很大,谢谢!
站长回复:很高兴我的文章能帮助到你。欢迎常来看看,我会持续更新的。
不错
站长回复:多谢支持,欢迎常来看看。
太棒了
站长回复:谢谢支持!