1. url scheme是什么?
url scheme可是看成一种浏览器里输入的上的url,或者我的电脑里的文件路径

2. 为什么要使用url scheme?
因为苹果手机使用了沙盒机制,即杜绝一个app可以随意的访问另一个app的功能,以此防止用户信息的泄露。但是这样做的话,对于手机app的可操作空间就减小了。所以开发app的时候,大家在程序里设置了url scheme来增加一些灵活性(所以不是所有app,或者app的所有界面都有对应的url scheme)

iPhone SDK可以把你的App和一个自定义的URL Scheme绑定。该URL Scheme可用来从浏览器或别的App启动你的App。

如何响应从别的App里发给你的URL Scheme申请,由你决定:可以唤醒你的App;也可以传一些信息给你。

大家要问了,那么打开其他App怎么办呢?
这里很简单,每个App在提交到App Store上去的时候,都有固定的格式;
其中格式中也包含了这个URL scheme信息(一些App有多个URL schemes值);
比如QQ
mqqflyticket:
mqqapi:
mqq:
mqqopensdkapi:
mqqOpensdkSSoLogin:
mqqapiwallet:
mqqopensdkapiV2:

以上这些,都是QQ的 URL scheme值,也就是说,我们可以用任意一种方式打开QQ;
PS:一些APP不同版本的URL scheme值还不同;

配置

要为 iOS 程序添加自定义协议的支持是一件很方便的事,只需要在程序的 Info.plist 添加一个 URL types 节点就可以了。在这个节点里,可以设置这个程序所支持的自定义协议名称,像 http、ftp 这种,一般我们可以设置为程序英文名称,像淘宝客户端中就设置了 taobao,这样 taobao:// 这个形式的 URL 就会关联到淘宝客户端的 App。

实现

在 Info.plist 里面设置完 URL types 之后,就可以在程序中处理这类 URL 的打开请求了。

在外部程序中,如果打开了指定自定义协议的 URL,程序中 application delegate 的 application:handleOpenURL: 方法就会被调用,在这个方法里,可以获取到触发这个方法的 URL,可以通过对这个 URL 进行判断,例如根据不同的 Host,不同的 Query String 来执行不同的动作。

- (void)application:(UIApplication *)application handleOpenURL:(NSURL *)url {NSLog(@"%@", [url absoluteString]);// 在 host 等于 item.taobao.com 时,说明一个宝贝详情的 url,// 那么就使用本地的 TBItemDetailViewController 来显示if ([[url host] isEqualToString:@"item.taobao.com"]) {// 这里只是简单地假设 url 形式为 taobao://item.taobao.com/item.htm?id=12345678// 先获取要查看的宝贝详情的 itemIdNSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3];// 使用本地 ViewController 来显示淘宝商品详情TBItemDetailViewController *controller = [[TBItemDetailViewController alloc] initWithItemId:itemId];[self.navigationController pushViewController:controller animated:YES];[controller release];}
}

淘宝 for iOS

现在,淘宝 和 淘宝 HD 两个客户端都支持 taobao:// 协议,来打开特定的链接。目前已经支持的有:

  • 宝贝详情 taobao://item.taobao.com/item.htm?id=12688928896
  • 宝贝搜索 taobao://s.taobao.com/?q=iphone
  • 店铺搜索 taobao://shopsearch.taobao.com/browse/shop_search.htm?q=iphone

例如,想要在自己的程序中,使用淘宝客户端来显示一个淘宝商品的详情,以支持用户可以直接在 iPhone 上购买,收藏等,就可以使用下面的代码:

- (void)showItemInTaobao4iOS:(NSString *)itemId {// 构建淘宝客户端协议的 URLNSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"taobao://item.taobao.com/item.htm?id=%@", itemId]];// 判断当前系统是否有安装淘宝客户端if ([[UIApplication sharedApplication] canOpenURL:url]) {// 如果已经安装淘宝客户端,就使用客户端打开链接[[UIApplication sharedApplication] openURL:url];} else {// 否则使用 Mobile Safari 或者内嵌 WebView 来显示url = [NSURL URLWithString:[NSString stringWithFormat:@"http://item.taobao.com/item.htm?id=%@", itemId]];[[UIApplication sharedApplication] openURL:url];}
}

使用淘宝客户端来打开淘宝链接的好处就是可以让用户更加方便的去购买商品,而不需要再重新登录,或者把用户名密码给了第三方的网站而导致安全隐患。

扩展性

在淘宝客户端中,支持的 URL 往往是淘宝网站已经有的链接,这些链接的 QueryString 中所带的参数往往已经满足了使用本地代码显示内容的需要,但是为了扩展性考虑,就需要添加一些额外的参数,并且与原有 QueryString 中不冲突的参数名称。通过这些额外的参数,再实现客户端打开链接时更多的自定义行为。

例如,如果在打开特定 URL,进行一些操作后需要再返回原来的程序,就会需要在 URL 中添加类似于 callback 这样的参数,这样在客户端处理完用户的操作后,可以将用户操作的结果返回给原来的程序,从而实现程序间的通信。

- (void)buyItemInTaobao4iOS:(NSString *)itemId {// 构建淘宝客户端协议的 URLNSString *format = @"taobao://item.taobao.com/item.htm?id=%@&_action=buy&_callback=myapp://taobaobuysuccess";NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:format, itemId]];// 使用淘宝客户端打开链接[[UIApplication sharedApplication] openURL:url];
}

注意:当前淘宝客户端并不支持这样的调用方式,这里仅是一个示例。

当然,在使用这种方式实现程序间通信的时候,需要考虑检查一下来源 URL 的合法性,防止一些非法的调用造成用户的损失。

结语

通过自定义协议地支持,可以将 iOS 程序的一些功能和服务提供给外部程序,也可以实现 Web 和本地应用之间的互相调用。

如果你的 iOS 程序有这些需求的话,那么就可以考虑在 iOS 程序中添加自定义协议的支持了。

URL Scheme相关推荐

  1. (0089)iOS开发之iOS应用间相互跳转(URL Scheme)

    需求:假设有应用A和应用B两个应用,现在需要从应用A跳转到应用B中.如果手机中没有安装跳到下载页,如果已经安装直接打开APP. 认识URL Scheme URL Schemes是苹果给出的用来跳转到系 ...

  2. Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装

    Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装 在移动应用开发中,经常需要判断一个app是否安装,iOS中有什么方式可以判断app是否安装呢? 这里介绍通过Url Sch ...

  3. 自定义 URL Scheme 完全指南

    本文转自 Migrant的博客,原文:<The Complete Tutorial on iOS/iPhone Custom URL Schemes> iPhone / iOS SDK 最 ...

  4. Android之okdownload下载提示奔溃Expected URL scheme ‘http‘ or ‘https‘ but was ‘data‘

    1 问题 客户现场奔溃在firebase上面提示错误信息如下 Fatal Exception: java.lang.IllegalArgumentException: Expected URL sch ...

  5. 自定义URL Scheme完全指南

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身"绑定"到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 ...

  6. 支付宝问题LaunchServices: ERROR: There is no registered handler for URL scheme alipay

    LaunchServices: ERROR: There is no registered handler for URL scheme alipay (这句话其实是在告诉你 设备上没有安装 支付宝的 ...

  7. shareSDK 提示#warning:尚未配置[新浪微博]URL Scheme:sinaweibosso.或wb

    问题: 按照集成文档配置后,只有分享到新浪微博时提示: #warning:尚未配置[新浪微博]URL Scheme:sinaweibosso.或wb 解决方法: 1,检查各个位置的appkey是否填写 ...

  8. ionic4 中使用 url scheme 插件 点击链接打开app

    ionic4 中使用 url scheme 插件 点击链接打开app 接到个新的需求,需要通过url打开应用,Google了下找到了 ionic 可以使用的 url scheme 插件 一.在使用前先 ...

  9. 解决mac使用svn: E170000: Unrecognized URL scheme for h

    原文章链接:http://blog.csdn.net/mhmyqn/article/details/46317107 mac系统版本 OS X版本:10.10.3 说明 10.10.3自带了svn,但 ...

  10. URL Scheme获取帮助文档

    URL Scheme获取帮助文档 方式一:小程序管理后台工具生成 一.生成步骤 1. 地址 微信公众平台 2. 扫码登录 3. 登陆后进入首页 「工具」(在右上角)–「生成 URL Scheme」 4 ...

最新文章

  1. 美国防承包商博思艾伦泄露五角大楼相关敏感文件
  2. 【算法学习笔记】43.动态规划 逆向思维 SJTU OJ 1012 增长率问题
  3. Play 2.0 用户指南 - 模版引擎 -- 针对Scala开发者
  4. SVA Function Coverage
  5. 关于继承构造器的调用
  6. 毕业设计今日总结(一)
  7. jzoj3054-祖孙询问【LCA】
  8. 发财指南-----------------86400/天
  9. 人脸识别门禁系统在2019年会加快应用
  10. 步进电机驱动实验(89C51 + KEIL + Proteus)
  11. 等比数列求和(递归)
  12. ArcGIS 在线地图加载插件介绍
  13. STM32H7B0 HAL库中关于DMA的注意事项以及DCMI调试遇到的问题及解决方法
  14. css 所有后代元素,CSS 选择子元素和后代元素
  15. VS隐藏菜单插件 Hide Main Menu
  16. 体验ChatGPT后,陷入沉思...
  17. Android手势检测简介
  18. el-table滚动条被挡住的问题
  19. C++打卡20-【排序模板】快速排序
  20. 志在指尖网站优化工具Ver2.0【收费版破解版】

热门文章

  1. android 7.0 高斯模糊,Android图像处理 – 高斯模糊的原理及实现
  2. 【免费】iPhone上最好用的短信群发软件: 快速短信4.1
  3. 4年级计算机 设计贺卡教案,川教版四年级下册信息技术教案 设计贺卡.doc
  4. 图片上传踩坑Uncaught (in promise) error
  5. 【报告分享】2020大数据标准化白皮书-信息技术研究中心(附下载)
  6. C++ list用法详解
  7. python零基础对main.py的学习(DROO)
  8. TS(TypeScript)语法快速入门
  9. android手机卫士,安卓手机卫士
  10. wordpress当发布器_当我们与专家讨论WordPress时发生了什么