最近学习了一下sina微博的sdk,了解并猜测了一下它的sso机制(客户端的),开始比较奇怪demo中是怎么调用起sina客户端的。其实ios的机制来讲,调起一个其他的app比较简单:
这个其他的app,也分为两种,一种是我们开发者开发的,另外一种,是系统的app.
(1)先说一下从一个app中调用我们开发者开发的app
我们自己的app,我简称appA,要调用的app我简称appB
过程如下:appA->appB appB->appA 并通过URL Scheme回传给appA一个参数。(这个过程,其实类似我们的demo,调起sina微博客户端,微博客户端经过处理之后,又返回到我们的demo过程)
需要做的工作步骤:
a) appA中,需要app(工程名称)-info.plist这个文件,这个文件一般在Supporting Files文件夹下,实在找不到就搜.plist文件吧,肯定有的。找到之后,在Information Property List下创建一个项, 右键,选择Add Row,找到URL types,创建之。然后再选择item0,继续Add Row,创建一个URL Schemes,在其下级的item里面,设置appA本身的URL Scheme.设置完毕之后,应该如下图所示:
,这个url scheme,说白了,就是appA的一个名字,用来给别的app识别的。假设appA的url scheme:App58ForIphone。
b)appB,也要做一个URL Schemes,方法参照a),假设appB的url scheme:58pinche
c)好了,appA和appB都有名字了,那么怎么识别(调起)它们呢,非常简单,
appA->appB
NSURL * pincheUrl = [NSURL URLWithString:@"58pinche://?key=value"];
[[UIApplicationsharedApplication] openURL:pincheUrl];
appB->appA
NSURL * appBUrl = [NSURL URLWithString:@"App58ForIphone://?key=value"];
[[UIApplicationsharedApplication] openURL:pincheUrl];
d)如何传参以及接收参数呢,通过URL Scheme规则(规则您自己定,最简单的,就是类似上面的key value形势)
接收并处理参数是根据ios框架在appdelegate提供的两个回调函数:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
在里面parse URL Scheme就可以了(制定好的URL Scheme非常重要)
(2) 如何调用系统的app呢,比如说短信,电话以及商店中的应用好评等等
结论:统统使用OpenURL
至于如何使用:请参见
所介绍的URL Schemes
下面随便举几个例子:
1).如果想要在程序中直接连接到app store的itunes而不进http的情况(进web页面,直接加http地址)。
NSString *str = [NSStringstringWithFormat: @"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=404612543"];
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:str]];
2).调用 自带mail
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"mailto://admin@hzlzh.com"]];
3).调用 电话phone
[[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8008808888"]];
4).调用 SMS
[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];
5).调用自带 浏览器 safari
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"http://www.hzlzh.com"]];
6).调用 Remote
[[UIApplicationsharedApplication] openURL:[NSURL URLWithString:@"remote://fff"]];