通过URL Scheme传递参数

热点总是一时的,借此炒作的人或许已达成目的。作为一名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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
URL Scheme跳转是一种在iOS中实现App之间跳转的方式。它可以通过在Safari或其他浏览器中输入特定的URL Scheme来启动目标App,并且可以通过在URL中添加自定义的参数来传递信息。URL Scheme的形式类似于网页,可以在Safari中输入类似"yourscheme://xxxxx"的URL来进行跳转。如果配置成功,则会弹出提示框询问是否访问该应用。 在iOS中,还有另一种常见的跳转方式叫做Universal Links。与URL Scheme不同,Universal Links是通过在网页上添加普通的超链接来实现跳转。当用户点击这个超链接时,会直接在对应的App内打开相关页面。相比URL Scheme,Universal Links更加方便,因为它不需要在URL中添加特定的Scheme,并且可以在App内部直接处理跳转逻辑。 总结起来,URL Scheme跳转是通过在浏览器中输入特定的URL Scheme来启动目标App并传递参数,而Universal Links是通过在网页上添加超链接来实现跳转到对应的App内部。两种方式都可以实现App之间的跳转,具体使用哪种方式取决于具体的需求和场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [IOS应用跳转URL scheme和Universal Links](https://blog.csdn.net/shaobing32/article/details/131170384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值