iOS开发 程序互调之iOSApp自定义URLScheme设计 ios10 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 *)applicationhandleOpenURL:(NSURL *)url {

NSLog(@"%@", [urlabsoluteString]);

// 在 host 等于 item时,说明一个宝贝详情的 url,

// 那么就使用本地的TBItemDetailViewController 来显示

if ([[url host]isEqualToString:@"item"]) {

// 这里只是简单地假设 url 形式为taobao://item/item.htm?id=12345678

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

NSString *itemId = [[url query]substringFromIndex:[[url query]rangeOfString:@"id="].location+3];

// 使用本地 ViewController 来显示淘宝商品详情

TBItemDetailViewController *controller =[[TBItemDetailViewController alloc] initWithItemId:itemId];

[self.navigationControllerpushViewController:controller animated:YES];

[controller release];

}

}

淘宝 for iOS

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

宝贝详情 taobao://item/item.htm?id=12688928896

宝贝搜索 taobao://s/?q=iphone

店铺搜索taobao://shopsearch/browse/shop_search.htm?q=iphone

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

- (void)showItemInTaobao4iOS:(NSString *)itemId {

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

NSURL *url = [NSURLURLWithString:[NSStringstringWithFormat:@"taobao://item/item.htm?id=%@",itemId]];

// 判断当前系统是否有安装淘宝客户端

if ([[UIApplicationsharedApplication] canOpenURL:url]) {

// 如果已经安装淘宝客户端,就使用客户端打开链接

[[UIApplication sharedApplication]openURL:url];

} else {

// 否则使用 Mobile Safari 或者内嵌 WebView 来显示

url = [NSURL URLWithString:[NSStringstringWithFormat:@"http://item/item.htm?id=%@",itemId]];

[[UIApplication sharedApplication]openURL:url];

}

}

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

扩展性

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

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

示例:

- (void)buyItemInTaobao4iOS:(NSString *)itemId {

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

NSString *format =@"taobao://item/item.htm?id=%@&_action=buy&_callback=myapp://taobaobuysuccess";

NSURL *url = [NSURLURLWithString:[NSString stringWithFormat:format, itemId]];

// 使用淘宝客户端打开链接

[[UIApplicationsharedApplication] openURL:url];

}

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

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

结语

【iOS开发】程序互调之iOSApp自定义URLScheme设计 ios10 url scheme

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

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

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/231946.html

更多阅读

如何自定义文件夹图标 win7自定义文件夹图标

如何自定义文件夹图标——简介如何制作个性的文件夹图标,一眼就区别开不同的文件夹。如何自定义文件夹图标——工具/原料png图片转化ico图片软件美图秀秀如何自定义文件夹图标——方法/步骤如何自定义文件夹图标 1、从百度图片里

qq空间怎么免费设置背景 qq空间免费自定义背景

qq空间怎么免费设置背景——简介QQ空间采用模块化的设计理念,为我们自定义QQ版面提供了方便的方法,只需要通常简单的拖动即可设计出唯美的个性化风格空间。下面就与小编一起来学习一下QQ空间背景的设计方法。qq空间怎么免费设置背景

怎样自定义QQ空间开场动画? qq空间开场动画diy

相信大家都想把自己的QQ空间装扮的漂漂亮亮的,那么自定义一个开场动画是分不开的,本文就教大家怎样自定义QQ空间开场动画。首先提醒大家的是:自定义QQ空间开场动画必须是黄钻三级以上。具体制作步骤如下:1、 打开QQ空间2、 点击装扮,

如何设置毕业论文的自定义格式样式及应用格式 毕业论文样式

如何设置毕业论文的自定义格式样式及应用格式——简介毕业论文是对大学学习的一份总结,都希望为自己的大学生活画上完美的句号,提交一份优秀的毕业论文。一份优秀的毕业论文是以规范的格式为前提的,所以在编写论文时,需要先按照学校的规

修改开机画面自定义开机画面 开机画面修改

修改开机画面(自定义开机画面)——简介自定义开机画面。让自己的电脑登录界面看起来更符合自己的要求。修改开机画面(自定义开机画面)——工具/原料logonui.exe修改开机画面(自定义开机画面)——方法 1 软件修改修改开机画面(自定义开机画

声明:《iOS开发 程序互调之iOSApp自定义URLScheme设计 ios10 url scheme》为网友花开半夏分享!如侵犯到您的合法权益请联系我们删除