当前位置: > > > Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)

Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)

(本文代码已升级至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()
    }
}

2,打开百度地图
下面样例点击按钮后,会自动跳转到百度地图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://
 Mail  mailto://
 iBooks  ibooks://
 App Store  itms-apps://itunes.apple.com
 Music  music://
 Videos  videos://

2,常用第三方软件
 名称 URL Scheme Bundle identifier
 QQ  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
  • 8楼
    2017-04-03 22:58
    bluetear

    uc浏览器那个错了,后面给的是海豚浏览器的 URL scheme

    站长回复

    多谢你的提醒,现已修正。

  • 7楼
    2016-12-22 22:57
    朱星

    UIApplication.shared.openURL(url!)这个方法被废弃了!

    站长回复

    多谢提醒,文章代码现已更新。

  • 6楼
    2016-08-11 18:59
    losunlight

    可以知道微信扫一扫的url么

    站长回复

    文章已更新扫一扫相关的URL Scheme,你可以再看下。

  • 5楼
    2016-06-28 17:57
    Jinkey

    怎么知道别人的程序会响应什么参数

    站长回复

    这个你就要去看看那些应用的API页面了,如果开放出来的话,他们开发页面上面都会有写的。

  • 4楼
    2016-06-26 23:32
    king

    为啥没有分享呢

    站长回复

    你指的是什么分享?

  • 3楼
    2016-06-23 17:05
    春熙

    站长,您好,您写的这个太好了,对我帮助很大,谢谢!

    站长回复

    很高兴我的文章能帮助到你。欢迎常来看看,我会持续更新的。

  • 2楼
    2016-06-23 16:55
    sych

    不错

    站长回复

    多谢支持,欢迎常来看看。

  • 1楼
    2016-06-12 13:40
    半夏

    太棒了

    站长回复

    谢谢支持!