iOS URL scheme 详解

来源:互联网 发布:淘宝0信誉二审店铺 编辑:程序博客网 时间:2024/06/11 16:12

iOS Launching Settings -> Restrictions URL Scheme.

http://stackoverflow.com/questions/8246070/ios-launching-settings-restrictions-url-scheme

WARNING: This method will not work for devices running iOS 5.1 and greater - See Hlung's comment below.

It's possible that the path component has a different name than the actual section, but it's also possible that you can't currently access that section straight from a URL. I found a list of possible URLs and Restrictions is not on it, maybe it's just not found out yet.

List of currently known URLs in the Settings app:

  • prefs:root=General&path=About
  • prefs:root=General&path=ACCESSIBILITY
  • prefs:root=AIRPLANE_MODE
  • prefs:root=General&path=AUTOLOCK
  • prefs:root=General&path=USAGE/CELLULAR_USAGE
  • prefs:root=Brightness
  • prefs:root=General&path=Bluetooth
  • prefs:root=General&path=DATE_AND_TIME
  • prefs:root=FACETIME
  • prefs:root=General
  • prefs:root=General&path=Keyboard
  • prefs:root=CASTLE
  • prefs:root=CASTLE&path=STORAGE_AND_BACKUP
  • prefs:root=General&path=INTERNATIONAL
  • prefs:root=LOCATION_SERVICES
  • prefs:root=ACCOUNT_SETTINGS
  • prefs:root=MUSIC
  • prefs:root=MUSIC&path=EQ
  • prefs:root=MUSIC&path=VolumeLimit
  • prefs:root=General&path=Network
  • prefs:root=NIKE_PLUS_IPOD
  • prefs:root=NOTES
  • prefs:root=NOTIFICATIONS_ID
  • prefs:root=Phone
  • prefs:root=Photos
  • prefs:root=General&path=ManagedConfigurationList
  • prefs:root=General&path=Reset
  • prefs:root=Sounds&path=Ringtone
  • prefs:root=Safari
  • prefs:root=General&path=Assistant
  • prefs:root=Sounds
  • prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • prefs:root=STORE
  • prefs:root=TWITTER
  • prefs:root=General&path=USAGE
  • prefs:root=VIDEO
  • prefs:root=General&path=Network/VPN
  • prefs:root=Wallpaper
  • prefs:root=WIFI
  • prefs:root=INTERNET_TETHERING


launch center pro支持的参数主要有两个,[prompt]文本输入框和[clipboard]剪贴板

淘宝宝贝搜索 taobao://s.taobao.com/?[prompt]
淘宝店铺搜索 taobao://shopsearch.taobao.com/b[prompt]

omnifocus:///add?name=[prompt]&note=[clipboard]
mdict://[prompt]

QQ的url是 mqq://
微信是weixin://
淘宝taobao://
点评dianping:// dianping://search
微博 sinaweibo://
名片全能王camcard://
weico微博weico://
支付宝alipay://
豆瓣fm:doubanradio://
微盘 sinavdisk://
网易公开课ntesopen://
美团 imeituan://
京冬openapp.jdmoble://
人人renren://
我查查 wcc://
1号店wccbyihaodian://
有道词典yddictproapp://
知乎zhihu://
优酷 youku://

以下为ipad版url schemes:

ZAKER :【zakeripad://】
mdict:【mdict://】
京东hd:【openApp.jdiPad://】
易迅:【wx6964eb0b10aa369b://】;【icson://】;【wap2app://】;【com51buyiPad://】;【sinaweibosso.2217266362://】;【yixunipad://】;
wunderlist:【fb208559595824260://】;【wunderlist://】;
1password:【db-0bcm217bz8olcxj://】;
支付宝:【alipay://】;
亚马逊:【fb115829135094686://】;
查找朋友:【grenada://】;【findmyfriends://】;【fmf1://】;
查找iphone:【fmip1://】;
homestyler:【fb110202249127916://】;
百度旅游hd:【sinaweibosso.3772466956://】;
百度视频hd:【BaiduVideoiPad://】;【baiduvideoipadapp://】;
百度相册hd:【BaiDuCloudAlbumHD://】;
百度音乐hd:【tencent100518384://】;【QQ05FDC9F0://】;【wxdeda8b7428c87b0b://】;【sinaweibosso.4257500584://】;【BaiduMusicHD://】;
百度浏览器hd:【bdbrowser://】;
百度文库hd:【bdwenku://】;
百度地图hd:【sinaweibosso.675661989://】;
百度云:【tencent100312028://】;
扇贝炼句:【wx6cf98af31a47ba29://】;
百词斩:[wxce5d9e837051d623://】;
一个one:【clover-one://】;
launchpro:【launch://】;【launchpro://】;【launchpro-light://】;【launchpro-dial://】;【launchpro-tweet://】;【launchpro-brightness://】;【launchpro-messaging://】;【launchpro-email://】;【launchpro-dropbox://】;【launchpro-clipboard://】;【launchpro-facebook://】;【launchpro-sinaweibo://】;【launch-textexpander://】;【db-23algz5zbfx3ocs://】;【launchipad://】;
当当hd:【dangdanghd://】;【ddhd://】;
大众点评hd:【dianpinghd://】;
多看阅读:【duokan-reader://】;
艺龙旅行hd:【elongiPad://】;
圈点hd:【skitch://】;
食记hd:【wxb9a9141190826bd8://】;
印象笔记hd:【enx://】;
popAgraph:【popagraphtumblr://】;
dropbox:【db-auth://】;【dbapi-1://】;【dbapi-2://】;【dbapi-3://】;【fb210019893730://】;
goodreader:【ghttp://】;【ghttps://】;【grhttp://】;【grhttps://】;【giwhttp://】;【giwhttps://】;【gropen://】;【com.goodreader.sendtogr://】;
houzz:【fb166981393359376://】;
ifttt:【ifttt://】;
名片全能王hd:【camcard://】;【fb444471182246461hdfull://】;【CamCardHDOpenAPI://】;
万年历:【wx5f3a0d4653cd3485://】;
拉手团购hd:【LaShouGroupHDPay://】;
美团hd:【iMeituan://】;
evermemo:【evermemo://】;
网易云课堂:【wangyiyunketang://】;
网易公开课:【ntesopen://】;
订票助手2:【trainassistfree://】;
pcalc lite:【pcalc://】;
爱奇艺视频:【QIYIHD-iPad://】;
documents:【fb435446596521711://】;
三国kill:【sgk://】;
知乎日报hd:【wb2812384762://】;【wb801442902://】;【wx81bd672c6e11bad0://】;【QQ05FE6368://】;【tencent100557672://】;【pocketapp89757://】;
扇贝新闻:【shanbaynews://】;
扇贝单词:【shanbay://】;
扇贝单词hd:【shanbaywordshd://】;
微盘:【sinaweibosso.2938478327://】;【sinavdisksso.2938478327://】;
新浪公开课:【wxa376b1970423b610://】;
skype:【skype://】;
什么值得买hd:【wxed08b6c4003b1fd5://】;
搜狐视频hd:【sohu-SViPad://】;【sohuvideohd://】;【wx91d741cfa16379bc://】;
teamviewer:【teamviewer8://】;
格志:【griddiary://】;【sumi-interactive://】;【db-d7wn1aiwz2ck3tj://】;
淘宝hd:【taobao://】;【itaobao://】;【taobaohd://】;【wx25e5e60c1e9fcd97://】;【sinaweibosso.346252009://】;【zhuzhancaipiao4ipad://】;【laiwangc6e34c6bf://】;
天猫:【tmall://】;
腾讯视频hd:【tenvideohd://】;【tenvideo2://】;
qq通讯录:【tencentappqqpim://】;
qq:【mqqflyticket://】;
微信:【weixin://】;【fb290293790992170://】;【wechat://】;
同步推正版HD:【tbtui://】;【tuihd://】;
航旅纵横pro:【sinaweibosso.umetrip://】;【umetrippro://】;
mathpad:【myscriptmathpad://】;
下厨房:【wxd80665a1fc1bf282://】;
无忌论坛:【wb801384327://】;【wxe932dc78276c3c24://】;【wb1315970163://】;
雅虎天气!:【yweather://】;
一号店:【ipadstore://】;
优酷hd:【youkuhd://】;
知乎日报:【wx841a6aace4a1dca4://】;
知乎:【zhihu://】;
diesel facts:【dk.publishonline.dieselfacts.china://】;【dps.9aebe5a79fb04d9abddf77d97c6794dc://】;
欧陆词典pro:【eudic://】;
拓词:【towordsp://】;
瘦身旅程:【sina.5253876156240b2daf015c9d://】;
词ci:【wx599b00cd734bd4a9://】;


链接:http://www.zhihu.com/question/19907735/answer/18680597

http://objcio.com/blog/2014/05/21/the-complete-tutorial-on-ios-slash-iphone-custom-url-schemes/

注意自从自定义 URL 的引入,本文始终是我博客中阅读量最大的文章。虽然大多数都相同,但仍然有一些细微差别的变化。本文是原帖的重写版,更新为最新的 iOS 和 Xcode 版本。

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

注册自定义 URL Scheme

注册自定义 URL Scheme 的第一步是创建 URL Scheme — 在 Xcode Project Navigator 中找到并点击工程 info.plist 文件。当该文件显示在右边窗口,在列表上点击鼠标右键,选择 Add Row:

向下滚动弹出的列表并选择 URL types

iOS Custom URL Scheme

点击左边剪头打开列表,可以看到 Item 0,一个字典实体。展开 Item 0,可以看到 URL Identifier,一个字符串对象。该字符串是你自定义的 URL scheme 的名字。建议采用反转域名的方法保证该名字的唯一性,比如 com.yourCompany.yourApp

urlScheme2a

点击 Item 0 新增一行,从下拉列表中选择 URL Schemes,敲击键盘回车键完成插入。

iOS Custom URL Scheme

注意 URL Schemes 是一个数组,允许应用定义多个 URL schemes。

iOS Custom URL Scheme

展开该数据并点击 Item 0。你将在这里定义自定义 URL scheme 的名字。只需要名字,不要在后面追加 :// — 比如,如果你输入 iOSDevApp,你的自定义 url 就是 iOSDevApp://

iOS Custom URL Scheme

此时,整个定义如下图:

iOS Custom URL Scheme

虽然我赞同 Xcode 使用描述性的名字的目的,不过看到创建的实际的 key 也是非常有用的。这里有一个方便的技巧,右键点击 plist 并选择 Show Raw Keys/Values,就能看到以下效果:

iOS Custom URL Scheme

还有另一种有用的输出格式,XML,因为可以非常容易的看到字典和原始数组及其包括的实体的结构。点击 plist 并选择 Open As – Source Code:

iPhone Custom URL Scheme

从 Safari 中调用自定义 URL Scheme

定义了 URL scheme,我们可以运行一个快速测试来验证应用是否如我们所期望的被调用。在这之前,我创建了一个准 UI 以辨别带有自定义 URL 的应用。该应用只有一个 UILabel,带有文本 “App With Custom URL”。下载源代码

iOS App with Custom URL

使用模拟器调用应用的步骤:

  • 在 Xcode 中运行应用
  • 一旦应用被安装,自定义 URL scheme 就会被注册
  • 通过模拟器的硬件菜单中选择 Home 来关闭应用
  • 启动 Safari
  • 在浏览器地址栏输入之前定义的 URL scheme(如下)

Call Custom URL Scheme from Safari

此时 Safari 将会关闭,应用会被带回到前台。祝贺你刚刚使用自定义 URL scheme 调用了一个 iPhone 应用。

从另一个 iPhone 应用中调用自定义 URL Scheme

让我们看看如何从另一个应用中调用自定义 URL scheme。我又创建了一个非常简单的 iPhone 应用,它只有一个 UILabel 和一个 UIButton — 前者显示了一段信息,告诉你这个应用将要通过自定义 URL scheme 来调用另一个应用,按钮则开始这个行为。下载源代码

iPhone app that call Custom URL Scheme

buttonPressed 方法中的代码处理 URL 调用:

12345678910111213141516171819
- (void)buttonPressed:(UIButton *)button{  NSString *customURL = @"iOSDevTips://";  if ([[UIApplication sharedApplication]    canOpenURL:[NSURL URLWithString:customURL]])  {    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];  }  else  {    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"                          message:[NSString stringWithFormat:                            @"No custom URL defined for %@", customURL]                          delegate:self cancelButtonTitle:@"Ok"                          otherButtonTitles:nil];    [alert show];  }}

第 5 行代码检查自定义 URL 是否被定义,如果定义了,则使用 shared application 实例来打开 URL (第 8 行)。openURL: 方法启动应用并将 URL 传入应用。在此过程中,当前的应用被退出。

通过自定义 URL Scheme 向应用传递参数

有时你需要通过自定义 URL 向应用中传递参数。让我们看看该如何完成这个工作。

NSURL 作为从一个应用调用另一个的基础,遵循 RFC 1808 (Relative Uniform Resource Locators) 标准。 因此你所熟悉的基于网页内容的 URL 格式在这里也适用。

在自定义了 URL scheme 的应用中,app delegate 必须实现以下方法:

1234
- (BOOL)application:(UIApplication *)application  openURL:(NSURL *)url  sourceApplication:(NSString *)sourceApplication  annotation:(id)annotation

从一个应用传递参数到另一个的诀窍是通过 URL。例如,假设我们使用以下的 URL scheme,想传递一个名为 “token”的参数和一个标识注册状态的标志,我们可以像这样创建一个 URL:

1
NSString *customURL = @"iOSDevTips://?token=123abct&registered=1";

在 web 开发中,字符串 ?token=123abct&registered=1 被称作查询询串(query string).

在被调用(设置了自定义 URL)的应用的 app delegate 中,获取参数的代码如下:

123456789
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url        sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  NSLog(@"Calling Application Bundle ID: %@", sourceApplication);  NSLog(@"URL scheme:%@", [url scheme]);  NSLog(@"URL query: %@", [url query]);  return YES;}

以上代码在应用被调用时的输出为:

123
Calling Application Bundle ID: com.3Sixty.CallCustomURLURL scheme:iOSDevTipsURL query: token=123abct&registered=1

注意 “Calling Application Bundle ID”,你可以用这个来确保只有你定义的应用可以与你的应用直接交互。

让我们改变一下代码,来验证发起调用的应用的 Bundle ID 是否合法:

123456789101112131415
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url        sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  // Check the calling application Bundle ID  if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"])  {    NSLog(@"Calling Application Bundle ID: %@", sourceApplication);    NSLog(@"URL scheme:%@", [url scheme]);    NSLog(@"URL query: %@", [url query]);    return YES;  }  else    return NO;}

有一点要特别注意,你不能阻止其他应用通过自定义 URL scheme 调用你的应用,然而你可以跳过后续的操作并返回 NO,就像上面的代码那样。也就是说,如果你想阻止其它应用调用你的应用,创建一个与众不同的 URL scheme。尽管这不能保证你的应用不会被调用,但至少大大降低了这种可能性。

自定义 URL Scheme 示例工程

我意识到按照本文的每一步做下来还是有一点复杂的。我做好了两个非常基础的 iOS 应用,一个自定义了 URL scheme,另一个则去调用它,并传递了一个比较短的参数列表(query string)。这些是体验自定义 URL 的很好的入门点。

  • Download Xcode project for app with Custom URL scheme
  • Download Xcode project for app to call custom URL scheme



0 0
原创粉丝点击