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

URLScheme应用实例
本文介绍了如何利用URLScheme在iOS应用间互相调用的方法,并提供了跳转至淘宝和百度地图的具体实现示例。此外,还列举了一系列常用应用的URLScheme及bundle identifier供开发者参考。
一,使用样例
常用的第三方应用都定义了不同的  URL Scheme,我们通过  UIApplication.sharedApplication().openURL() 方法打开相应的链接,即可跳转到对应的  App 中。

1,打开淘宝
下面样例点击按钮后,会自动跳转到淘宝App中。由于我们还传递了一个商品链接参数,那么跳转过来后就会自动打开该商品页面。
      原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)         原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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"
         let  url =  NSURL (string: urlString)
         UIApplication .sharedApplication().openURL(url!)
     }
 
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}

2,打开百度地图
下面样例点击按钮后,会自动跳转到百度地图App中。由于我们还传递了地址作为参数,那么跳转过来后就会自动定位到该位置。
(注意:由于参数中带有中文,我们这里使用  stringByAddingPercentEncodingWithAllowedCharacters 方法对其转义一下。)
      原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)         原文:Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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.stringByAddingPercentEncodingWithAllowedCharacters(
             . URLQueryAllowedCharacterSet ())!
         let  url =  NSURL (string: encodeUrlString)
         UIApplication .sharedApplication().openURL(url!)
     }
 
     override  func  didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
     }
}

二,常见应用的URL Scheme
1,系统默认应用
 名称URL SchemeBundle 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 SchemeBundle identifier
 QQ mqq:// 
 微信 weixin:// 
 腾讯微博 TencentWeibo:// 
 淘宝 taobao:// 
 支付宝 alipay:// 
 微博 sinaweibo:// 
 weico微博 weico:// 
 QQ浏览器 mqqbrowser://com.tencent.mttlite
 uc浏览器 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:// 

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1141.html
<think>我们正在处理如何在H5+ iOS平台上配置URL Schemes以实现被第三方应用调用的功能。根据引用[3],在uni-app项目中,设置UrlSchemes有两种情况:在线打包和离线打包。用户提到的是H5+ iOS平台,因此我们主要关注iOS平台的配置。 步骤: 1. 在线打包(使用HBuilderX): - 打开uni-app项目的manifest.json文件。 - 找到“APP常用其他设置”(在HBuilderX中可能位于“App SDK配置”或类似位置)。 - 分别填写Android和iOS的UrlSchemes。由于用户只关心iOS,我们只需填写iOS部分。 2. 离线打包: - 离线打包需要手动修改原生工程的配置文件。对于iOS平台,需要修改Info.plist文件。 具体操作: 一、在线打包(HBuilderX): 1. 在HBuilderX中打开项目,找到manifest.json文件。 2. 切换到“源码视图”或直接在“可视化视图”中找到“App常用其他设置”。 3. 在“iOS设置”中,找到“UrlSchemes”选项,填写自定义的scheme,例如"test"(注意:不需要写"://"部分,只需要协议名)。 4. 保存重新打包。 二、离线打包(iOS原生工程配置): 1. 打开iOS工程(例如Xcode项目)。 2. 在工程导航器中,选择Info.plist文件。 3. 在Info.plist中,添加一个URL types数组(如果不存在的话)。 4. 在URL types数组中,添加一个字典,包含以下键值对: - URL identifier: 一般设置为Bundle Identifier(例如com.yourcompany.yourapp- URL Schemes: 数组,里面包含一个或多个自定义的scheme(例如test)。 5. 保存重新编译。 注意:UrlSchemes的格式只是一个单词(协议名),例如你希望第三方应用通过"test://"调用,那么这里就填写"test"。 测试: 在Safari浏览器中输入一个链接,格式为:`<a href="test://abc">打开App</a>`,点击该链接即可调起应用。 另外,根据引用[2],UrlSchemes没有唯一性,可能存在重复,因此不要通过UrlSchemes传递敏感信息。 最后,请确保在H5+项目中正确配置,以便在应用被调用时能够处理传递过来的参数。这通常需要在应用的入口文件(如App.vue)中监听处理。 示例代码(在App.vue中): ```javascript onLaunch: function(options) { // 处理通过UrlScheme启动的情况 if (options.query && options.query.uri) { // 解析uri,options.query.uri可能是类似"test://abc"的字符串 // 进行相应的处理 } } ``` 注意:具体如何处理参数取决于你的业务逻辑,但启动参数可以通过options.query获取。 相关问题: 1. 如何测试iOS的UrlSchemes是否配置成功? 2. 在iOS中,如何通过UrlSchemes传递参数? 3. 在H5+应用中,如何获取通过UrlSchemes传递参数?</think>### H5+ iOS平台配置URL Schemes指南 在H5+ iOS平台设置URL Schemes需要修改原生工程配置,以下是具体步骤: #### 一、配置iOS原生工程 1. **打开Xcode工程** 定位到`Info.plist`文件(或通过Xcode的`Info`标签页配置) 2. **添加URL Types** 在`Info.plist`中添加以下配置(示例值): ```xml <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLName</key> <string>com.yourcompany.appname</string> <!-- 唯一标识符 --> <key>CFBundleURLSchemes</key> <array> <string>yourcustomscheme</string> <!-- 自定义协议名 --> </array> </dict> </array> ``` *注:`yourcustomscheme`即你的URL Scheme(如`wechat`)* 3. **配置Scheme白名单**(iOS 9+必需) 在`Info.plist`中添加: ```xml <key>LSApplicationQueriesSchemes</key> <array> <string>yourcustomscheme</string> </array> ``` #### 二、H5+应用处理Scheme调用 在`plusready`事件中监听Scheme触发: ```javascript document.addEventListener('plusready', function() { const handleOpenURL = function(url) { console.log('接收到Scheme调用:', url); // 示例:yourcustomscheme://path?key=value const params = url.split('://')[1]; // 解析参数 plus.nativeUI.alert("收到调用参数: " + params); }; // 注册全局函数供iOS调用 window.handleOpenURL = handleOpenURL; }); ``` #### 三、第三方调用方式 1. **H5页面调用**: ```html <a href="yourcustomscheme://open/pageA">打开APP</a> <button onclick="location.href='yourcustomscheme://action/scan'"> 扫码功能 </button> ``` 2. **原生App调用**(Swift示例): ```swift if let url = URL(string: "yourcustomscheme://product/123") { if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:]) } } ``` #### 注意事项 1. **Scheme命名规范**: - 使用小写字母和数字(避免特殊字符) - iOS建议长度≥3字符(如`myapp`) - 全局不唯一,需确保目标用户场景不冲突[^2] 2. **安全限制**: - 不能传递敏感信息(明文可见) - iOS首次调用会弹出用户确认框 - 冷启动时需处理参数解析延迟(建议延时处理) 3. **调试技巧**: ```bash xcrun simctl openurl booted "yourcustomscheme://test" ``` #### 常见问题解决 - **无法唤醒APP**:检查`CFBundleURLSchemes`拼写和`LSApplicationQueriesSchemes`配置 - **参数解析失败**:URL需进行URI编码`encodeURIComponent()` - **iOS 14+权限问题**:需在`Info.plist`添加`NSAppleEventsUsageDescription`描述 > 配置示例参考:UrlScheme 是系统提供的跳转协议,由应用程序注册后,其他程序可通过UrlSchemes调用该应用[^2]。在iOS平台需通过修改原生工程配置文件实现[^3]。 --- ### 相关问题 1. 如何防止URL Scheme被恶意劫持? 2. iOS 15+对URL Schemes调用有哪些新的权限限制? 3. 如何在H5+应用中实现Scheme调用的双向通信? 4. URL Schemes和Universal Links有什么区别及适用场景?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值