通过URL Scheme传递参数
来源:互联网 发布:人工智能程序原理 编辑:程序博客网 时间:2024/06/11 20:09
热点总是一时的,借此炒作的人或许已达成目的。作为一名iOS开发程序员,我们只能继续写代码,改变世界。
上一篇文章讲到:Xcode6.4注册URLScheme步骤详解,这一篇继续来看看URLScheme传递参数。
通过注册的URLScheme向目标APP传递参数
通过URLScheme启动APP很简单就可以做到,但有时候我们想在启动APP的时候传递一些参数,这个时候我们就可以通过URLScheme自定义URL来传递参数了。
昨天我们在AppDelegate调用了UIApplicationDelegate的代理方法:
-(BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url
{
//接受传过来的参数
NSString*text=[[urlhost]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"打开啦"
message:text
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertViewshow];
returnYES;
}
我们来看看苹果给这个方法的注释:
-(BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url; //Willbedeprecatedatsomepoint,pleasereplacewithapplication:openURL:sourceApplication:annotation:
这个方法在未来将被废弃,可以用application:openURL:sourceApplication:annotation:来代替。
URL传参格式
昨天我们在iOSStrongDemo注册的URLScheme还记得是什么吗?你应该还有印象的就是iOS开发的ID:**iOSDevTip**。
假设我们想要传递两个参数分别是名字name和手机号phone,格式如下:
iOSDevTip://?name=ligang&phone=13888888888
有没有似曾相识的感觉。我们用get方式请求一个接口是不是就是这样的。
被启动的APP处理传过来的参数
-(BOOL)application:(UIApplication*)application
openURL:(NSURL*)url
sourceApplication:(NSString*)sourceApplication
annotation:(id)annotation
{
NSLog(@"sourceApplication:%@",sourceApplication);
NSLog(@"URLscheme:%@",[urlscheme]);
NSLog(@"URLquery:%@",[urlquery]);
//接受传过来的参数
UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"打开啦"
message:[urlquery]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertViewshow];
returnYES;
}
当APP被启动是,会调用代理方法application:openURL:sourceApplication:annotation:。参数URL就是启动APP的URL,参数sourceApplication就是来源APP的BundleID。
我们依然通过Safari来测试,在Safari的地址栏中输入:iOSDevTip://?name=ligang&phone=13888888888
即可打开APP,看看参数是否传递过来:
最后我们看一下打印:
2015-07-1522:38:25.655iOSStrongDemo[9983:2894855]sourceApplication:com.apple.mobilesafari
2015-07-1522:38:28.664iOSStrongDemo[9983:2894855]URLscheme:iosdevtip
2015-07-1522:38:28.665iOSStrongDemo[9983:2894855]URLquery:name=ligang&phone=13888888888
sourceApplication打印出来是com.apple.mobilesafari,从这里可以看出来,是从Safari启动我们的APP的。
我们虽然自定义了URLScheme,但是我们不能阻止别人通过自定义的URLScheme来打开我们的应用。怎么解决呢?
我们可以指定相应的sourceApplication,也就是相应的BundleID,通过BundleID来决定是否可以打开我们的APP:
-(BOOL)application:(UIApplication*)application
openURL:(NSURL*)url
sourceApplication:(NSString*)sourceApplication
annotation:(id)annotation
{
NSLog(@"sourceApplication:%@",sourceApplication);
NSLog(@"URLscheme:%@",[urlscheme]);
NSLog(@"URLquery:%@",[urlquery]);
if([sourceApplicationisEqualToString:@"com.3Sixty.CallCustomURL"]){
//接受传过来的参数
UIAlertView*alertView=[[UIAlertViewalloc]initWithTitle:@"打开啦"
message:[urlquery]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertViewshow];
returnYES;
}else{
returnNO;
}
}
这样我们就可以通过BundleID来决定是否允许打开我们的APP,demo下载地址:iOSStrongDemo
- 通过URL Scheme传递参数
- 通过URL Scheme传递参数
- 通过注册的URL Scheme向目标APP传递参数
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数
- ClickOnce 通过URL传递参数
- 通过url路径传递参数
- 通过地址栏传递参数.通过url传递参数
- SQL报表 - 通过URL传递报表参数
- ASP.net通过URL传递参数
- 通过URL向报表传递参数
- jsp通过url传递和获取参数
- 通过URL传递参数,并解析
- 通过URL传递参数到JSF
- jsp通过url传递参数乱码
- jquery通过url传递 和 接收 参数
- 通过url地址传递多个参数
- IOS动画教程(一)
- [node] ejs模板手册
- HDU 1520 Anniversary party(有向边树形DP)
- 使用python获取传入目录下apk文件的所有图标
- SpringMVC+Hibernate4+Spring3整合开发实现CRUD
- 通过URL Scheme传递参数
- JPA总结——实体关系映射(一对多@OneToMany)
- java程序设计基础_陈国君版第五版_第五章例题
- JSON与XML的区别比较
- Oracle 树结构查询
- Android 蓝牙
- 矢量图动画
- 上传excel文件
- MFC文件操作