iOS开发:内置URL schemes

 在IOS的应用中经常会看到一些应用程序通过某个点击动作而直接跳到App Store页面,开始很奇怪这种第三方应用于IOS的系统应用交互时怎么实现的。后来发现苹果的开发者文档中关于这种通信的实现是默认支持的,只要第三方 的应用符合规范即可,这里的规范就是指接下来我们要简单介绍的东西——URL Schemes。

根据规定,IOS中支持几种特殊的URL schemes,第三方的本地应用程序和运行在Safari的Web应用程序,通过这些URL schemes可以与IOS的系统应用进行整合,为的是为用户提供一种无缝的用户体验过程。某些手机IOS应用中都会展示一些电话号码信息,在用户点击这 些号码时,通过使用规定内合适的URL,应用程序可以打开手机的Phone Application进行拨号呼叫操作。这是一种很快捷的方式,省去了用户要记忆号码,然后再逐次拨号的流程。

1.URL scheme打开方式

根据第三方应用程序的类型,打开IOS系统应用的方式划分为两种 
             (1) Native App或我们常称呼的本地应用,可以通过UIApplication的openURL:方法来系统应用 
             (2)Web App或我们常称呼的Web应用,指的是那些运行在Safari浏览器中或通过UIWebView 内嵌入本地应用的的Web应用程序,可以通过点击或长按操作打开系统应用。 
           当然,顺利打开系统应用的前提是二者都要保证提供指定的附和规范的URL scheme。

2.URL Scheme分类

IOS支持的URL Schemes分为以下几类 

         (1)Mail Links(邮件链接) 

          通过mailto协议来加载Mail应用程序,只要提供目标邮箱地址即可,代码如下
           HTML页面中

 
  1. <a href="mailto:frank@wwdcdemo.example.com">John Frank</a> 

本地应用中

 
  1. if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"mailto:frank@wwdcdemo.example.com"]] ){ 
  2. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"无法打开程序" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles: nil] ; 
  3. [alert show] ; 

另外也可以通过to,cc,bcc,subject,body字段来指定邮件的抄送,密送,主题,消息内容。参数值都要经过URL编码处理。    

 
  1. mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here! 

(2)Phone links(电话链接)

tel协议用来启动Phone 应用,以及呼叫指定的号码。在网页上点击一个号码链接会弹出一个对话框来提示用户是否需要拨号,并在用户允许后开始拨号。在本地的应用中,打开 一个tel协议地址会直接拨号而对用户提示。如下           HTMl页面中

 
  1. <a href="tel:1-408-555-5555">1-408-555-5555</a> 

本地应用中

 
  1. if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"tel:1-408-555-5555"]] ){ 
  2. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"无法打开程序" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles: nil] ; 
  3. [alert show] ;        

       为了防止恶意的号码重定向或改变通话行为以及帐号,Phone应用支持tel协议的大部分的特殊字符。当URL包含*或#时,Phone应用是不会 进行拨号的。如果你的应用程序是tonguo用户输入或其他未知源获取的,那么URL中的任何特殊字符都需要经过编码。对于本地应用,可以使用 NSString的stringByAddingPercentEscapesUsingEncoding:方法来编码。           此外,IOS中的safari默认是执行号码检测的。然而,如果你得页面包含了那些可以被检测为号码,但实际意义却不是号码的数字时,你可以选择关闭当前页面的号码检测行为。只要在页面代码加入以下元数据即可

 
  1. <meta name = "format-detection" content = "telephone=no"> 

后面一页将为您介绍Text links(文本链接)、iTunes links(iTunes链接)、Youtube links(Youtube链接)!

 

(3)Text links(文本链接)

使用sms协议来加载Messages应用。该URL的正式格式为"sms:<phone>",其中<phone>是可选的,用来指定sms消息接收者的号码。参数值包含了数字,"+" , "-" , "." 。             HTML页面中

 
  1. <a href="sms:">Launch Messages App</a> 
  2. <a href="sms:1-408-555-1212">New SMS Message</a> 

本地应用中

 
  1. if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"sms:1-408-555-1212"]] ){ 
  2. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"无法打开程序" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles: nil] ; 
  3. [alert show] ; 

(4)iTunes links(iTunes链接)

iTunes链接用来链接到iTunes Store中的内容。通过Apple的 iTunes Link Maker我们可以方便的查询并获取应用程序的链接地址。              HTML页面中

 
  1. <a href="https://itunes.apple.com/cn/app/numbers/id361304891?mt=8">Numbers</a> 

本地应用中

 
  1. [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://maps.apple.com/?q=cupertino"]] ; 

正确的地图链接格式规则如下

域名必须为maps.apple.com

路径不能为/maps/*

参数不能为q=*

参数不能包含view=text或dirflag=r

(5)Youtube links(Youtube链接)

Youtube链接用来加载YouTube应用程序或者链接值YouTube的web站点来播放指定的视频。链接到Youtube的应用可以播放其视频。链接是以http为开头的,而非youtube。                HTML页面中

 
  1. <a href="http://www.youtube.com/watch?v=xNsGNlDb6xY">iPhone5</a> 
  2. <a href="http://www.youtube.com/v/xNsGNlDb6xY">iPhone5</a> 

本地应用程序中

 
  1. //或 http://www.youtube.com/v/xNsGNlDb6xY 
  2. if(![[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=xNsGNlDb6xY"]] ){ 
  3. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"无法打开程序" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles: nil] ; 
  4. [alert show] ; 

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索应用
, scheme
, uialertview
, 链接
, 应用程序
, uiwebview
, 本地
, 号码
, ios自定义uialertview
, 自定义uialertview
, ios开发nsurl操作
, ios开发uiwebview
uiwebview加载html
scheme、schema、url schemes、url scheme是什么、ios schemes,以便于您获取更多的相关知识。

时间: 2024-10-21 19:53:11

iOS开发:内置URL schemes的相关文章

警告:不要在 iOS 应用内置浏览器中输入密码

国外知名推特客户端 Twitterriffic 开发者 Craig Hockenberry 在最新的博客文章中警告 iOS 用户,不要在 iOS 应用的内置浏览器中输入敏感信息.根据 Hockenberry 介绍,应用内置浏览器有能力记录用户输入的字符,即使浏览器显示正在使用安全连接登陆. 这意味着恶意开发者可以创建包含内置浏览器的应用,并获取我们使用的用户名和密码.很多应用使用内置浏览器方便用户登陆社交网络,不过这也意味着有很大的 威胁.Hockenberry 表示 iOS 7 和 iOS 8

iOS开发系列--网络开发

概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力的.今天就会给大家介绍这部分内容: Web请求和响应 使用代理方法 简化请求方法 图片缓存 扩展--文件分段下载 扩展--文件上传 NSURLSession 数据请求 文件上传 文件下载 会话 UIWebView 浏览器实现 UIWebView与页面交互 网络状态 目 录 Web请求和响应 使用代理

ios开发 布局-iOS应用内加载Web如何实现内置Safari的效果(见图)

问题描述 iOS应用内加载Web如何实现内置Safari的效果(见图) 应用内夹在Web如何实现内置Safari的效果(见图) 顶部和底部栏特征开发 布局-iOS应用内加载Web如何实现内置Safari的效果(见图)-safari 加载完毕事件"> 解决方案 这个需要你自己做网页内容或者做iOS控件 解决方案二: 要么直接调用Safari,要么使用webview,要么自己制作一个Safari 风格的view 解决方案三: 这个需要你自己做网页内容或者做iOS控件. 解决方案四: 在自己的w

iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 目 录 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,此时你可以直接使用UIApplication的OpenURL:方法指定特定

【IOS开发必收藏】详解IOS应用程序内使用IAP/STOREKIT付费、沙盒(SANDBOX)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/550.html //--2012-12-11日更新   获取"产品付费数量等于0这个问题"的原因 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 "Contracts, Tax, and Banking "没

苹果未来iOS都将内置Twitter应用程序

新浪科技讯 北京时间2月17日凌晨消息,据外国媒体周四报道,苹果日前已经决定将Twitter也内置到苹果最新的操作系统Mac OS X Mountain Lion当中去.苹果曾经于去年6月出乎外界的意料地宣布了与Twitter达成了合作伙伴关系,并表示将会把该社交网络微博服务内置到每一款使用苹果最新iOS 5操作系统的移动设备当中去.从 今年夏天开始,不仅所有新出品的Mac都将内置Twitter应用程序,同时所有旧有型号苹果电脑在升级到新的操作系统之后都将会内置Twitter.这也从一定程度上将

Chrome OS将内置谷歌自主开发媒体播放器

Google计划推出的基于Linux的开源操作系统Chrome OS主要面向上网本领域,直接集成Chrome浏览器,所有程序均基于Web运行,这也是Google关于网络取代桌面思想的又一次贯彻实施.Chrome OS将在2010年下半年正式发布,如果你还在为Chrome OS完全关于Chrome浏览器而郁闷,Google操作系统项目主管Matthew Papakipos带来了一个好消息. 在接受采访时,Matthew Papakipos指出,Chrome OS将整合媒体播放器,Google将为这

IOS详解TableView:内置刷新,EGO,以及搜索显示控制器

这几天因为住的地方的网出了一点问题,除了能上Q,上微博以外其他的网页全都无法登陆.博客也 就没有跟进. 今天恢复了,所以继续更新博客.也希望大家能继续评论或私自给我一些建议或者 交流:-) 今天找到了以前一个TableView的例子,主要关于上下拉刷新的,所以写了一个demo,然 后更新到博客上来. 内置刷新 内置刷新是苹果IOS6以后才推出的一个API,主要是针对 TableViewController增加了一个属性,refreshControl,所以如果想用这个内置下拉刷新的话,最好给 你的

Android开发入门(二)使用意图 2.5 使用Intent调用内置应用程序

我们已经了解了如何在自己的单个应用中调用activity.但是,android开发中比较重要的一点,就是使 用intent调用其他应用的activity.特别地,你的应用可以调用系统中的许多"内置"应用.所谓的"内置 "应用,指的就是系同级别的应用,比如Browser,Phone,Sms等等.举个例子,如果你的应用需要打开一个 网页,可以使用Intent对象去调用浏览器,浏览器把网页显示出来,而不是要自己创建一个浏览器... 下面的例子展示如何调用系统中的几个比较常