通过注册的URL Scheme向目标APP传递参数
通过注册的URL Scheme向目标APP传递参数
通过URL Scheme启动APP很简单就可以做到,但有时候我们想在启动APP的时候传递一些参数,这个时候我们就可以通过URL Scheme自定义URL来传递参数了。
昨天我们在AppDelegate调用了UIApplicationDelegate的代理方法:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url
{
// 接受传过来的参数
NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打开啦"
message:text
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
return YES;
}
我们来看看苹果给这个方法的注释:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url; // Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:
这个方法在未来将被废弃,可以用application:openURL:sourceApplication:annotation:来代替。
URL传参格式
昨天我们在iOSStrongDemo注册的URL Scheme还记得是什么吗?你应该还有印象的就是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(@"URL scheme:%@", [url scheme]);
NSLog(@"URL query: %@", [url query]);
// 接受传过来的参数
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打开啦"
message:[url query]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
return YES;
}
当APP被启动是,会调用代理方法application:openURL:sourceApplication:annotation:。参数URL就是启动APP的URL,参数sourceApplication就是来源APP的Bundle ID。
我们依然通过Safari来测试,在Safari的地址栏中输入:iOSDevTip://?name=ligang&phone=13888888888

即可打开APP,看看参数是否传递过来:

最后我们看一下打印:
2015-07-15 22:38:25.655 iOSStrongDemo[9983:2894855] sourceApplication: com.apple.mobilesafari
2015-07-15 22:38:28.664 iOSStrongDemo[9983:2894855] URL scheme:iosdevtip
2015-07-15 22:38:28.665 iOSStrongDemo[9983:2894855] URL query: name=ligang&phone=13888888888
sourceApplication打印出来是com.apple.mobilesafari,从这里可以看出来,是从Safari启动我们的APP的。
我们虽然自定义了URL Scheme,但是我们不能阻止别人通过自定义的URL Scheme来打开我们的应用。怎么解决呢?
我们可以指定相应的sourceApplication,也就是相应的Bundle ID,通过Bundle ID来决定是否可以打开我们的APP:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
NSLog(@"sourceApplication: %@", sourceApplication);
NSLog(@"URL scheme:%@", [url scheme]);
NSLog(@"URL query: %@", [url query]);
if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"]){
// 接受传过来的参数
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打开啦"
message:[url query]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
return YES;
}else{
return NO;
}
}
这样我们就可以通过Bundle ID来决定是否允许打开我们的APP,demo下载地址:iOSStrongDemo
本文出处刚刚在线:http://www.superqq.com/blog/2015/07/15/tong-guo-url-schemechuan-di-can-shu/
通过注册的URL Scheme向目标APP传递参数的更多相关文章
- Android通过DeepLink方式跳转其他App传递参数
网上对于安卓DeepLink方式跳转传递参数的例子较少,说的也不客观,实践之后发现还是有一些坑.其实为什么要用DeepLink方式跳转,有些是因为引流的原因,他们希望通过网页就能直接跳转到App的界面 ...
- 【HOW】如何通过URL给Reporting Services报表传递参数
[本地模式Reporting Services] 参见官方文档:http://msdn.microsoft.com/en-us/library/ms154042.aspx 示例:http://serv ...
- Xcode6.4注册URL Scheme步骤详解
URL Scheme的作用 我们都知道苹果手机中的APP都有一个沙盒,APP就是一个信息孤岛,相互是不可以进行通信的.但是iOS的APP可以注册自己的URL Scheme,URL Scheme是为方便 ...
- 通过自定义的URL Scheme启动你的App
iPhone SDK可以把你的App和一个自定义的URL Scheme绑定.该URL Scheme可用来从浏览器或别的App启动你的App. 如何响应从别的App里发给你的URL Scheme申请,由 ...
- 利用URL Scheme打开APP并传递数据
https://blog.csdn.net/u013517637/article/details/55251421 利用外部链接打开APP并传递一些附带信息是现在很多APP都有的功能,我在这把这部分的 ...
- iOS 唤起APP之URL Scheme
什么是URL Scheme 简单的说,由于苹果选择使用沙盒机制来保障用户的隐私和安全,APP只能访问自己沙盒数据,但同时也阻碍了应用间合理的信息共享.因此苹果提供了一个可以在APP之间跳转的方法:UR ...
- Android业务组件化之URL Scheme使用
前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...
- 自定义 URL Scheme 完全指南
本文由 Migrant 翻译自 The Complete Tutorial on iOS/iPhone Custom URL Schemes,转载请注明出处. 注意: 自从自定义 URL 的引入,本文 ...
- 自定义 URL Scheme 完全指南(转载)
iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...
随机推荐
- NPM使用详解(上)
1.NPM是什么? NPM是JavaScript的包管理工具,在安装NodeJS(什么?你不知道node?来,我们合计合计:https://nodejs.org/)的时候,会自动安装上npm. 要查看 ...
- 你不一定知道的几个很有用的 Git 命令
这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...
- 数据库收缩:NOTRUNCATE与TRUNCATEONLY
在进行数据库收缩时,我们有2个可用选项:NOTRUNCATE,TRUNCATEONLY.这篇文章我们会详细讨论下这2个选项的具体区别. NOTRUNCATE 当你对数据库收缩命令提供NOTRUNCAT ...
- C#对象与XMl文件之间的相互转换
C#提供三种序列化方式,分别为: 1.是使用BinaryFormatter进行串行化: 2.使用SoapFormatter进行串行化: 3.使用XmlSerializer进行串行化.其中对于Binar ...
- 关于Latch争用
Latch是什么 Latch是SQL Server引擎保证内存中的结构的一致性的轻量同步机制.比如索引,数据页和内部结构(比如非叶级索引页).SQL Server使用Buffer Latch保 ...
- mysql模拟rownum的一个方法
mysql> select * from t2; +----+---------------------+ | id | d | +----+---------------------+ :: ...
- “康园圈--互联网+校园平台“项目之Sprint3
sprint3任务列表 1.部署项目内测版上线,并绑定相应域名. 2.添加测试用的模拟数据. 3.写已实现功能及效果汇报文档. 4.写项目总结博客. 5.记录并分析用户反馈. 看板动态 第一次 第二次 ...
- ASP.NET MVC5 网站开发实践
http://www.cnblogs.com/mzwhj/p/3538108.html
- 文本对象模型(Document Object Model)
本文内容: 1. 概述 2. DOM中的节点类型 3. DOM节点的选取 4. 存取元素属性 5.DOM元素的增删 6.小结 ★ 概述 文本对象模型(DOM)是一个能够让程序和脚本动态访问和更新文档内 ...
- 关于重装系统与Visual Studio 2015
开始入坑 ... 9.25左右,由于本人电脑上同时安装了社区版vs2013与社区版vs2015,.无奈天公不作美,vs2015我每次一点击右上角的“登录”,马上就白屏,并弹窗提示,停止运行(忘了截屏 ...