天天看点

打开第三方应用程序

原文链接:http://www.jianshu.com/p/169e31cacf42

注意事项

关于info.plist 第三方登录 添加URL Schemes白名单

近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。

受此影响,当你的应用在iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码:

设置步骤:项目名->TARGETS->info->URL Types,设置其中的identifier,URL Schemes,Role:Viewer(代表只读)
           
<key>LSApplicationQueriesSchemes</key>
<array>
<!-- 微信 URL Scheme 白名单-->
<string>wechat</string>
</array>
           
  1. 自定义 URL Scheme

    URL Scheme能够让我们通过自定义的协议在应用程序间传递信息,当你想要发送数据给一个实现了自定义URL Scheme的应用时,只需要创建好合适格式的URL,然后调用openURL:方法,系统就会载入注册了该scheme的应用然后将你的URL传递给他,比如如下的代码,todolist是一个其它应用注册的scheme,通过openURL便可以将服务请求发送到该应用(自定义的URL Scheme要能够唯一标示该APP,如果你的URL Scheme跟别人冲突了,那么你的app就不一定会被调起,iOS并不保证调用哪个应用);

    例如:

    NSURL *myURL = [NSURL URLWithString:@”todolist://newid=20”];

    [[UIApplication sharedApplication] openURL:myURL];

处理:

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if ([[url scheme] isEqualToString:@"Example2"]) {
NSString *content = [url resourceSpecifier];
//解析content获取数据
//...
return YES;
}
return NO;
}

//获取NSURL中的query参数
-(NSDictionary *)getParamsFromNSURL:(NSString *)query{

NSMutableDictionary *data = [NSMutableDictionary dictionary];

NSArray *array = [query componentsSeparatedByString:@"&"];
for(NSString *tmp in array){
NSArray *params = [tmp componentsSeparatedByString:@"="];
MyLog(@"第三方的请求参数:%@-%@",params[],params[]);
[data setObject:params[] forKey:params[]];
}

return data;
}

打开第三方应用代码:
NSString *str = @"schydbg://?account=liuliu";
//下面这句必须得加,不加你会后悔的
str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:str];
[[UIApplication sharedApplication] openURL:url];