打开第三方应用程序

原文链接: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[0],params[1]);
[data setObject:params[1] forKey:params[0]];
}

return data;
}

打开第三方应用代码:
NSString *str = @"schydbg://?account=liuliu";
//下面这句必须得加,不加你会后悔的
str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:str];
[[UIApplication sharedApplication] openURL:url];
org.eclipse.swt.SWT.class org.eclipse.swt.SWTError.class org.eclipse.swt.SWTException.class org.eclipse.swt.accessibility.ACC.class org.eclipse.swt.accessibility.Accessible.class org.eclipse.swt.accessibility.AccessibleActionAdapter.class org.eclipse.swt.accessibility.AccessibleActionEvent.class org.eclipse.swt.accessibility.AccessibleActionListener.class org.eclipse.swt.accessibility.AccessibleAdapter.class org.eclipse.swt.accessibility.AccessibleAttributeAdapter.class org.eclipse.swt.accessibility.AccessibleAttributeEvent.class org.eclipse.swt.accessibility.AccessibleAttributeListener.class org.eclipse.swt.accessibility.AccessibleControlAdapter.class org.eclipse.swt.accessibility.AccessibleControlEvent.class org.eclipse.swt.accessibility.AccessibleControlListener.class org.eclipse.swt.accessibility.AccessibleEditableTextAdapter.class org.eclipse.swt.accessibility.AccessibleEditableTextEvent.class org.eclipse.swt.accessibility.AccessibleEditableTextListener.class org.eclipse.swt.accessibility.AccessibleEvent.class org.eclipse.swt.accessibility.AccessibleHyperlinkAdapter.class org.eclipse.swt.accessibility.AccessibleHyperlinkEvent.class org.eclipse.swt.accessibility.AccessibleHyperlinkListener.class org.eclipse.swt.accessibility.AccessibleListener.class org.eclipse.swt.accessibility.AccessibleTableAdapter.class org.eclipse.swt.accessibility.AccessibleTableCellAdapter.class org.eclipse.swt.accessibility.AccessibleTableCellEvent.class org.eclipse.swt.accessibility.AccessibleTableCellListener.class org.eclipse.swt.accessibility.AccessibleTableEvent.class org.eclipse.swt.accessibility.AccessibleTableListener.class org.eclipse.swt.accessibility.AccessibleTextAdapter.class org.eclipse.swt.accessibility.AccessibleTextAttributeEvent.class org.eclipse.swt.accessibility.AccessibleTextEvent.class org.eclipse.swt.accessibility.AccessibleTextExtendedAdapter.class org.eclipse.swt.accessibility.AccessibleTextExtendedListener.class org.eclipse.swt.accessibility.AccessibleTextListen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值