ios 自定义URL Scheme 设计

在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL
Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个程序。

例如在 iPad 上浏览网页,并且 iPad 已经安装了 淘宝 HD,那么就打开下面这个链接就会在淘宝 HD
中查看这个商品的详细信息,也可以方便的使用淘宝 HD 进行购买、收藏等操作。

在淘宝 HD 中查看商品“2012西藏卓明谷方舟登舰卡(船票)”

当然,如果你在 Mac OS X 中打开这个链接,或者在没有安装 淘宝 HD 的 iPad 中打开这个链接,会提示没有程序来打开这个链接。

配置

要为 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

// 先获取要查看的宝贝详情的 itemId

NSString *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 {

// 构建淘宝客户端协议的 URL

NSURL *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 {

// 构建淘宝客户端协议的 URL

NSString *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 程序中添加自定义协议的支持了。

参考资料

iOS Application Programming Guide: Implementing Custom URL Schemes

— EOF —

论坛原帖:http://www.cocoachina.com/bbs/read.php?tid=104689

时间: 2024-10-15 04:06:07

ios 自定义URL Scheme 设计的相关文章

iOS 自定义 URL Scheme 完全指南

http://www.cocoachina.com/industry/20140522/8514.html “” 阅读器 自定义URL Scheme 本文转自Migrant的博客,原文:<The Complete Tutorial on iOS/iPhone Custom URL Schemes> iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Schem

iOS App 自定义 URL Scheme 设计(转自COCOACHINA)

在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个程序. 例如在 iPad 上浏览网页,并且 iPad 已经安装了 淘宝 HD,那么就打开下面这个链接就会在淘宝 HD 中查看这个商品的详细信息,也可以方便的使用淘宝 HD 进行购买.收藏等操作. 在淘宝 HD 中查看商品“2012西藏卓明谷方舟登舰卡(船票)” 当然,如果你在 Mac OS X 中打

IOS之URL Scheme的使用

本文转载自(下载示例代码请打开第一个链接): http://www.cocoachina.com/industry/20140522/8514.html http://blog.csdn.net/wbw1985/article/details/26264029 1 URL Scheme是什么 与Android的URL Scheme类似,是为方便app之间互相调用而设计的.你可以通过一个类似URL的链接,通过系统的OpenURL来打开该app,并可以传递一些参数.每个URL必须能唯一标识一个APP

自定义URL Scheme完全指南

iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme 注册自定义 URL Scheme 的第一步是创建 URL Scheme — 在 Xcode Project Navigator 中找到并点击工程 info.plist 文件.当该文件显示在右边窗口,在列表上点击鼠标右键,选择 Add Row: 向下滚动弹出的列表并选择 URL types. 点击左

自定义 URL Scheme 完全指南

本文由 Migrant 翻译自 The Complete Tutorial on iOS/iPhone Custom URL Schemes,转载请注明出处. 注意: 自从自定义 URL 的引入,本文始终是我博客中阅读量最大的文章.虽然大多数都相同,但仍然有一些细微差别的变化.本文是原帖的重写版,更新为最新的 iOS 和 Xcode 版本. iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启

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

Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装 在移动应用开发中,经常需要判断一个app是否安装,iOS中有什么方式可以判断app是否安装呢? 这里介绍通过Url Scheme来判断应用是否安装. Url Scheme在这里就不详讲了,可以看文章URL Schemes 使用详解. 首先我们来看看在原生iOS开发中Objective-C如何编写判断代码: if ([[UIApplication sharedApplication] canOpenURL:[NSURL

IOS -- 利用URL Scheme启动第三方应用

以启动Instagram为例 Custom URL Scheme Opening instagram://, followed by one of the following parameters, will open our app and perform a custom action. For example, for camera, you would direct users on the iPhone to the custom URL instagram://camera. URL

【转】在Mac和iOS中注册自定义的URL Scheme

在Mac和iOS中注册自定义的URL Scheme JAN 10TH, 2012 URL Scheme是类似http://,ftp://,afp://这样的东西,通常是用传输协议作为URL Scheme.不过事实上,你可以在iOS和Mac中注册任何类型的URL Scheme.当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求. 要在程序中注册自定义URL Scheme非常简单.主要分为两个步骤:在程序的Info.plist中加入你需要注册的UR

URL Scheme

什么是URL Scheme? URL Scheme类似于网页的链接.例如:weixin://定义了外部应用打开微信的一个入口,weixin就是Scheme:表示的是一个 URL 中的一个位置——最初始的位置.而weixin://dl/moments(朋友圈)可以打开微信朋友圈功能模块. 定义应用自己的URL Scheme: 方法一:选中项目-->info-->URL Types-->点击加号按钮添加-->在URL Scheme后添加自己应用的URL Scheme名字. 方法二:在i